Ich schreibe einen einfachen Server/Client-Socket in C. Der Client fordert den Benutzer auf, eine Nachricht einzugeben und der Server antwortet mit der Wiederholung derselben. Das Problem ist, wenn ich eine Nachricht vom Client sende der Server antwortet durch Hinzufügen von zusätzlichen Zeichen. Wie behebe ich das?C-Sockets: Warum hängt mein Server am Ende zusätzliche Zeichen an?
Dies ist mein Client-Code
while(1) {
bzero(buffer, BUFSIZE);
printf("Enter Message: ");
scanf("%s", buffer);
//send some data
if(send(socket_fd, buffer, strlen(buffer), 0) <0) {
fprintf(stderr,"sending failed\n");
return 1;
}
//receive a reply from the server
if(recv(socket_fd, server_reply, BUFSIZE,0)<0)
{
fprintf(stderr,"failed to reply. \n");
break;
}
fprintf(stdout, "Reply: %s\n ", servreply);
}
Dieser Code
meinem Server istint read_size;
while((read_size = recv(client_socket_fd, buffer, BUFSIZE,0))>0)
{
// Reply back to the client
if (0 > write(client_socket_fd, buffer, strlen(buffer))) {
fprintf(stderr, "could not write back to socket\n");
} else {
fprintf(stdout, "message back to client\n");
}
}
if(read_size==0)
{
fprintf(stderr,"disconnected.\n");
fflush(stdout);
}
else if(read_size==-1){
fprintf(stderr, "error.\n");
}
Dies ist die Ausgabe
Enter Message: welcome
Reply: welcome
Enter Message: hello
Reply: hellome
Enter Message: hi
Reply: hillome
Danke sein sollte. Außerdem kannst du bitte erklären, wenn du eine Nachricht wie "Wie geht es dir" eingibst, antwortet der Server in verschiedenen Zeilen. "Wie sind" und "du" sind auf drei verschiedenen Zeilen –
Denn so funktioniert es. Sie müssen 1. Wählen und lesen, bis nichts mehr zu lesen ist, aber das ist schwierig. 2. Verwenden Sie ein Messaging-Protokoll, um eine Nachricht zusammenzustellen und zu rekonstruieren, wenn sie die andere Partei erreicht. –