Tôi có một ứng dụng client-server.Nhiều cuộc gọi để gửi() được hợp nhất thành một cuộc gọi đến recv()
Máy khách đang gửi một chuỗi theo sau là số nguyên sử dụng hai cuộc gọi send()
riêng biệt. Hai dữ liệu này được cho là được lưu trữ thành hai biến khác nhau trên máy chủ.
Vấn đề là cả hai biến được gửi đều được nhận vào cuộc gọi recv()
. Do đó, hai chuỗi được gửi bởi hai khác biệt send()
s được ghép và lưu trữ trong bộ đệm của recv()
đầu tiên.
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;
}
Làm thế nào tôi có thể sửa chữa nó? Tôi đang làm gì sai?
" delimit bạn thông điệp ứng dụng với một số giá trị byte đã biết "chỉ để làm rõ, điều này được gọi là giao thức, một số người sử dụng một cái gì đó như thế này STXyourmessageETXXOR nơi STX (bắt đầu) trong HEX là 2, ETX (END) trong HEX là 3, và XOR là một bitwise hoạt động^cho STXyourmessageE TX, kết quả = STX^y -> kết quả^= u ... trong đó XOR biểu diễn chữ số để xác minh –