|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2009
Messaggi: 753
|
[C] Semplice client windows
Ciao, ho un problemino con questo codice, non ho mai usato la select() sotto windows, su MSDN mi sembra che sia uguale....
però questo spezzone di codice ha un problema... select ritorna sempre e si ferma ogni volta su read().. il risultato è che sembra funzionare correttamente ma se l'invio richiede due cicli di recv() i dati in ricezione rimangono ingabbiati nel buffer di recv() e vengono stampati solo dopo, ovvero al prossimo mio input... se non mi sto confondendo con altro praticamente select() non stà funzionando.... è sbagliato usare select() in questo modo sotto windows? Codice:
while(1) { printf("\n# "); FD_SET(_fileno(stdin),&rset); FD_SET(sock,&rset); select(0,&rset,NULL,NULL,NULL); if(FD_ISSET(_fileno(stdin),&rset)) { memset(send_buffer,0,BUF_SIZE); if(fgets(send_buffer,BUF_SIZE,stdin) == NULL) ErrMngmnt(FGETS_ERROR); if(send(sock,send_buffer,BUF_SIZE,0) == SOCKET_ERROR) ErrMngmnt(WSAGetLastError()); } if(FD_ISSET(sock,&rset)) { memset(recv_buffer,0,BUF_SIZE); if(recv(sock,recv_buffer,BUF_SIZE,0) == SOCKET_ERROR) ErrMngmnt(WSAGetLastError()); fprintf(stdout,"%s",recv_buffer); fflush(stdout); } } (il server che non da output per un cambiamento di cartella) il client rimane ingarbugliato Ultima modifica di Teo@Unix : 02-03-2010 alle 16:40. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:03.