Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [c] un client e due server

    ciao raga
    avrei bisogno di un aiuto in c

    non riesco a connettere un client a due server distinti in particolare non riesco a capire come vanno scritte le varie socket bind ecc


    nello specifico
    il codice del server è unico ma deve esssere utilizzato su apparecchi diversi quindi la porta di comunicazione deve essere specificata all'inizio


    il problema è che quando faccio partire il codice il client mi ritona subito la shelle senza
    connettersi al server


    vi posto la parte riguardante solo la connessione se poi voltete tutto il codice ve lo posto mq dopo ci sono solo letture di file

    nel client

    codice:
    int main(int argc, char **argv)
    {
    indirizzo.sin_family =AF_INET ;
    indirizzo.sin_port=htons(5208);
    indirizzo.sin_addr.s_addr=htonl(INADDR_ANY);
    fd1 = socket(PF_INET, SOCK_STREAM, 0);
    connect(fd1, (struct sockaddr *) &indirizzo,sizeof(indirizzo));
    indirizzo2.sin_family =AF_INET ;
    indirizzo2.sin_port=htons(5209);
    indirizzo2.sin_addr.s_addr=htonl(INADDR_ANY);
    fd2 = socket(PF_INET, SOCK_STREAM, 0);
    connect(fd2, (struct sockaddr *) &indirizzo2,sizeof(indirizzo2));
    nel server

    codice:
    int main(int argc, char **argv)
    {
     porta=(int)argv[1];
     printf("LA PORTA è:%d",porta);
     mio_indirizzo.sin_family = AF_INET;
     mio_indirizzo.sin_port=htons(porta);
     mio_indirizzo.sin_addr.s_addr=htonl(INADDR_ANY);
     fd1 = socket(PF_INET, SOCK_STREAM, 0);
     bind(fd1, (struct sockaddr *) &mio_indirizzo,sizeof(mio_indirizzo)); 
     listen(fd1, 5);
      while (1) 
       {
         fd2 = accept(fd1,NULL,NULL);
           if ((pid=fork())== 0)
    nel server la porta è passata su linea di comando è corretta trasformarla in intero come ho fatto ?

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    No. Devi usare la atoi per convertire da stringa a int.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    62
    Faccio una precisazione su quello che ha detto shodan : l' argomento della funzione htons deve essere un intero, quindi devi prima convertire la stringa di caratteri in un intero, e poi chiamare htons con quel valore :

    mio_indirizzo.sin_port=htons(atoi(porta));


    Poi, quando chiami una funzione di Winsock ti conviene inserire dei costrutti per segnalare errori provenienti da suddette funzioni ; per esempio :

    codice:
        if (listen( ListenSocket, 1 ) == SOCKET_ERROR) {
            printf("Error listening on socket.\n");
            closesocket(ListenSocket);
            WSACleanup();
            return 1;
        }


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.