PDA

Visualizza la versione completa : Problema su socket [C++]


Kreator
19-10-2004, 16:26
Ciao raga.

Ho fatto un programmino client/server con le Winsock che spedisce dei semplici messaggi di testo al server, il quali li riceve e li stampa a video.
Qualcuno mi sa spiegare il perche' quando vado a leggere sulla socket dal server, mi legge la stringa che gli ho spedito e in più tanti caratteri che non c'entrano niente ??

Questi sono i blocchi di codice interessati:

// CLIENT

char Buffer[150] = "";
do
{
cout << Buffer;
strcpy (Buffer,"");
cout << "Write new message ('.q' to escape): ";
scanf ("%150s", Buffer);
cout << "lenght: " << strlen (Buffer);
send (sock,Buffer,strlen (Buffer),0);
}while (strcmp(Buffer,".q")!=0);



// SERVER

client=accept(sock,(struct sockaddr*)&client_addr,&lun);
cout << "Connection accepted from: " << inet_ntoa (client_addr.sin_addr);
if (err!=0) printf ("Errore nella connessione");
while (true)
{
recv (client,sms,150,0);
_flushall();
printf ("%d%s", strlen(sms),sms);
}

Ho provato anche a guardare i vecchi post, per esempio quello di Johnny_Depp, ma mi sembra molto simile.
Qualcuno mi può dare una mano ?
Grazies.

:dhò:

Xadoom
19-10-2004, 18:49
Perchè nella funzione recv() dici di ricevere 150 caratteri e lui ne riceve 150!!
Devi prima vedere quanti caratteri sono disponibili in ricezione e poi riceverne il numero giusto!
Prova così:


DWORD sockByte;
/*Lettura dei Byte in attesa di ricezione*/
ioctlsocket(socket,FIONREAD,&sockByte);
if(sockByte>0){
recvbuf = new char[sockByte];
/*Ricezione messaggio*/
recv( sock, recvbuf, sockByte, 0 );
}

Dovrebbe andare :ciauz:

Xadoom
19-10-2004, 18:50
Dimenticavo, per la documentazione sulle winsock puoi guardare qui:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/winsock_functions.asp
trovi anche la descrizione del metodo ioctlsocket().
:ciauz:

Kreator
20-10-2004, 11:22
Perfetto.
Ora funziona.
Grazie mille anche per la documentazione
Ciaoooo.

:ciauz:

Xadoom
20-10-2004, 14:31
Di nulla. :ciauz:

Loading