Mam aplikację klient-serwer.Wiele wywołań send() jest połączonych w jedno wywołanie recv()
Klient wysyła ciąg, po którym następuje liczba całkowita za pomocą dwóch różnych połączeń send()
. Te dwa dane powinny być przechowywane na dwóch różnych zmiennych na serwerze.
Problem polega na tym, że obie zmienne wysłane są odbierane w rozmowie recv()
. Dlatego dwa ciągi wysyłane przez dwa różne send()
s są powiązane i przechowywane w buforze pierwszego recv()
.
server.c:
printf("Incoming connection from client %s:%i accepted\n",inet_ntoa(clientSocketAddress.sin_addr),ntohs(clientSocketAddress.sin_port));
memset(buffer,0,sizeof(buffer));
int sizeofMessage;
if ((recv(clientSocket,buffer,MAXBUFFERSIZE,0)==sizeofMessage)<0)
{
printf("recv failed.");
closesocket(serverSocket);
clearWinsock();
return EXIT_FAILURE;
}
char* Name=buffer;
printf("Name: %s\n",Name);
if ((recv(clientSocket,buffer,MAXBUFFERSIZE,0))<0)
{
printf("bind failed.");
closesocket(serverSocket);
clearWinsock();
return EXIT_FAILURE;
}
int integer=ntohs(atoi(buffer));
printf("integer: %i\n",intero);
client.c:
if (send(clientSocket,Name,strlen(Name),0)!=strlen(Name))
{
printf("send failed");
closesocket(clientSocket);
clearWinsock();
return EXIT_FAILURE;
}
printf("client send: %s",Name);
int age=35;
itoa(htons(age),buffer,10);
sizeofBuffer=strlen(buffer);
if (send(clientSocket,buffer,sizeofBuffer,0)!=sizeofBuffer)
{
printf("bind failed.");
closesocket(clientSocket);
clearWinsock();
return EXIT_FAILURE;
}
Jak mogę to naprawić? Co ja robię źle?
" oddziela wiadomości z pewną znaną wartością bajtów "tylko dla wyjaśnienia, to się nazywa protokół, niektórzy używają czegoś takiego jak STXyourmessageETXXOR gdzie STX (start) w HEX to 2, ETX (END) w HEX to 3, a XOR jest bitowo operacja^dla STXyourmessageE TX, wynik = STX^y -> wynik^= u ... gdzie XOR reprezentuje cyfrę do weryfikacji –