|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 35
|
[C] Socket in ascolto senza kill
Ciao ragazzi! Devo completare un progetto! Ho creato un lato server dove gli utenti si connettono e scambiano messaggi fino a qui tutto ok e funge... ma appena il client esce dalla connessione il server si auto-killa mentre io vorrei che resta sempre in ascolto in attesa di nuove connessioni! Il progetto è su windows le winsock quale funzione dovrei utilizzare per farlo rimanere in ascolto? Grazie in anticipo a tutti!
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Penso che basti rimettere il server in ascolto
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 35
|
wingman87 grazie per avermi risposto! Comunque si... la logica sarebbe quella ma siccome le socket non le mastico benissimo perchè le sto tutt'ora studiando vorrei sapere la funzione in modo che la studio! Ho fatto delle ricerche potrebbe essere la funzione "while"?
Esempio: il mio server finisce in questo modo closesocket(sendrecv); closesocket(sock); WSACleanup(); return 0; } } |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
while è un costrutto del linguaggio che probabilmente ti tornerà utile. Per rimettere in ascolto il server basta fare nuovamente una accept sul socket in ascolto. Tu probabilmente hai un socket s su cui hai richiamato listen, poi avrai fatto una accept su quel socket ottenendo un socket per comunicare con il client. Quello che devi fare ora è chiudere il socket con cui comunicavi con il client e richiamare nuovamente accept sul socket s.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non devi chiudere il socket dopo la accept, quel socket deve servire anche successivamente per una nuova accept. La accept torna un socket e quel socket deve essere usato per gestire il client connesso, appena il client connesso finisce il suo lavoro devi tornare sulla accept.
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Oct 2006
Messaggi: 35
|
Quindi ragazzi questa parte qui è quella interessata:
listen(sock,1); int lun = sizeof (struct sockaddr); sendrecv = accept(sock,(struct sockaddr*)&sendrecv_addr,&lun); Giusto? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2005
Messaggi: 365
|
Posta tutto il codice.
Se ho intuito quello che vuoi fare, devi inserire la accept dentro un while(1). |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Quel "sendrecv" è un socket. Su quel socket puoi fare send e recv, ma una volta che hai disconnesso il client devi ritornare sulla accept per ottenere un nuovo socket "sendrecv" per il seguente client. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:05.





















