|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
|
[c/c++] 2 connesisoni socket
Sto tentando di creare un piccolo programma dos che funga da chat. Apro il socket del server e del client, il server invia il messaggio di benvenuto e il client inizia a trasmettere quello che l'utente inserisce. Fin quando è un client tutto ok! il server riceve e stampa a video. Ora però devo connettere un altro client, si connette il server afferma che non ci sono errori ma quando digito qualcosa nel 2 client non arriva nulla al server. Vi lascio qua parte del codice sorgente del server:
Codice:
while (1) { AcceptSocket = SOCKET_ERROR; while ( AcceptSocket == SOCKET_ERROR ) { AcceptSocket = accept( socketparent, NULL, NULL ); } printf( "Client Connected.\n"); socketparent = AcceptSocket; //Trasferisco il socket temporaneo a quello principale break; } char sendbuf[100] = "\nBenvenuto\n"; char recvbuf[1000] = ""; bytesSent = send( socketparent, sendbuf, strlen(sendbuf), 0 ); //Invio il msg di benvenuto while(true) { while ((bytesRecv=recv( socketparent, recvbuf, 100, 0 ))==-1){}; //Attendo un messaggio printf( "\nMsg: %s",&recvbuf); //Stampo il messaggio }
__________________
Federica |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao,
ci sono alcune osservazioni da fare sul codice. Purtroppo sono parziali poiche' non si sa come e' fatto il resto. 1 - Come hai strutturato il server? E' una applicazione multitask/multithread? Se e' una applicazione a thread singolo, come gestisci il fatto che, in uscita dal loop infinito, non vengono gestite ulteriori connessioni? 2 - Analogamente al punto sopra: quante copie di socketparent hai in circolo? 3 - Quando spedisci la scritta di benvenuto non spedisci il relativo terminatore. Tutto fa pensare che la stessa tecnica sia usata anche nel client. In tal caso ti esponi ad un crash random. Quando ricevi qualcosa, per esempio, lo vai a stampare con la printf() e questo e' sufficiente a produrre crash o funzionamenti "strani"; 4 - Ricorda che stai usando uno stream: potresti non ricevere tutti i dati in una volta sola, anche se la stringa e' corta! Prova a chiarire questi passaggi e posta ancora Sottovento
__________________
In God we trust; all others bring data |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
|
Stavo pensando di farlo multithread ma non so come strutturarlo perchè se devo accettare molti client non posso creare 100 200 thread sarebbe una follia... Idem per il sockparent... Per terminatore della stringa cosa intendi?
__________________
Federica |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
per gestire più connessioni client potresti usare il comando select.
prova a guardare in questo link: http://www.lilik.it/~mirko/gapil/gap...apilsu251.html |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:31.