PDA

Visualizza la versione completa : [C] Network programming


xela86
27-11-2008, 21:39
Ciao. Avrei bisogno di una informazione: ho visto come in C su linux si possa fare in maniera semplice una applicazione client server con le varie chiamate a listen e accept da parte del server e con la connect da parte del client. Ora mi sorge un dubbio: se volessi fare un'applicazione in cui i client loggano al server e poi hanno gli indirizzi degli altri client, come faccio a instaurare la connessione tra i 2 client? Devo far si che tutti i client, o con la fork o con i thread, stiano sia in listening che eventualmente abili ad effettuare una connect verso un altro client? Grazie ciao

oregon
28-11-2008, 00:21
La domanda non e' chiara ... se c'e' un server, a cosa ti serve far comunicare tra loro i client ?

Descrivi un po' il tipo di programma che vorresti fare ...

xela86
28-11-2008, 09:31
considera una cosa stile messenger, in cui il client logga al server per informare che è connesso e quindi il server gli ritorna l'elenco dei client connessi per una eventuale connessione. quello che appunto non so è se poi il client vuole connettersi ad un altro client posso farlo direttamente con una connect e se in tal caso quindi il client ricevente debba in un thread attendere in listen. grazie ciao

oregon
28-11-2008, 14:22
Se la connessione tra i client deve avvenire direttamente come hai detto, sì, il client deve avere un socket in ascolto.

Ma potresti anche comunicare attraverso il server. I messaggi dal client 1 al client 2 possono passare attraverso il server stesso.

xela86
28-11-2008, 18:48
ok grazie era quello che pensavo, o implementare la listen o altrimenti il server deve occuparsi di inoltrare i pacchetti. penso che però l'implementazione tramite client sia più semplice e inoltre non rischia di ricadere nella situazione del single point of failure. grazie ciao inoltre ho visto come con python il tutto sia realizzato ad alto livello con pochissime righe.

xela86
07-01-2009, 19:32
continuando nello sviluppo di tale problema, sono arrivato ad implementare la situazione in cui il client collegandosi al server da la sua disponibilità a ricevere connessioni: faccio la bind per associare una porta al client e quindi la connect al server. Con un thread gestisco la listen e quindi l'eventuale accept, solo che se in questo thread rifaccio la bind, essa restituisce -1 poichè forse è stata fatta in precedenza; se viceversa nel login non faccio la bind e la faccio solo nel thread della listen, il client loggherà al server con una porta casuale. A causa di ciò mi conviene allora far si che faccia la bind per loggare in modo da scegliere una porta tra quelle non ben note e mi metto in ascolto sempre su una stessa porta che scelgo a priori? So che forse la spiegazione è un pò complessa ma vi ringrazio anticipatamente per una eventuale risposta. Ciao

xela86
07-01-2009, 19:48
tra l'altro ora che ci penso qualora mettessi ciascun client in ascolto per una connessione in entrata sulla stessa porta non potrei più provare il progetto in locale in quanto più processi andrebbero a usare la stessa porta o sbaglio?

xela86
09-01-2009, 20:17
nessun aiuto?

oregon
09-01-2009, 20:39
Originariamente inviato da xela86
nessun aiuto?

La domanda qual e' ? :)

xela86
09-01-2009, 20:59
Originariamente inviato da xela86
continuando nello sviluppo di tale problema, sono arrivato ad implementare la situazione in cui il client collegandosi al server da la sua disponibilità a ricevere connessioni: faccio la bind per associare una porta al client e quindi la connect al server. Con un thread gestisco la listen e quindi l'eventuale accept, solo che se in questo thread rifaccio la bind, essa restituisce -1 poichè forse è stata fatta in precedenza; se viceversa nel login non faccio la bind e la faccio solo nel thread della listen, il client loggherà al server con una porta casuale. A causa di ciò mi conviene allora far si che faccia la bind per loggare in modo da scegliere una porta tra quelle non ben note e mi metto in ascolto sempre su una stessa porta che scelgo a priori? So che forse la spiegazione è un pò complessa ma vi ringrazio anticipatamente per una eventuale risposta. Ciao


ehm sarebbe qua per quanto magari non semplice da capire

Loading