Je suis la programmation d'un serveur de socket très simple suivant this sample code. Le serveur est opérationnel et je peux me connecter via telnet (en utilisant Putty, en fait). Chaque fois qu'une nouvelle connexion est reçue, je Spawn un nouveau thread qui est le code suivant:C programmation Winsock: ordures d'entrée
DWORD WINAPI receive_cmds(LPVOID lpParam)
{
char outbuffer[100];
outbuffer[0] = '\0';
char inbuffer[100];
inbuffer[0] = '\0';
int res;
SOCKET current_client = (SOCKET)lpParam;
while (1) {
res = recv(current_client, inbuffer, sizeof inbuffer - 1, 0);
if (res > 0) {
inbuffer[res] = '\0';
printf("Got '%s'\n", inbuffer);
}
Sleep(10);
if (res == 0) {
closesocket(current_client);
ExitThread(0);
}
//printf("%s\n", inbuffer);
strcpy(inbuffer, "");
}
}
Dès que je le connecte imprime ce charabia:
Si je entrée « bonjour » puis "stackoverflow" dans le client, ce que je reçois:
Même si je déclarais explici A la fin de la ligne '\ 0', il semble prendre beaucoup plus de la ligne, plus je ne sais pas pourquoi il imprime l'entrée deux fois, le second étant le premier moins le premier ou les deux premiers caractères.
Une aide pour comprendre ce qui se passe? Merci d'avance.
EDIT: révisée en conséquence à ce que suggéré par dérouleur
Salut! merci beaucoup, je me rapproche beaucoup plus maintenant. Dès que je me connecte je reçois toujours "Got" et le problème de double entrée, le second étant un "\ n", je suppose que –
pistacchio
Quelle est la valeur de 'res'? –
@Alok: la page de manuel pour recv dit: "recv() renvoie le nombre d'octets reçus, ou -1 si une erreur s'est produite" (légèrement paraphrasé pour la grammaire). – unwind