TCP程序在C语言中反转字符串给出一半结果

Sam*_*Sam 0 c string tcp

我编写了一个TCP客户端/服务器程序来反转字符串,但结果部分正确.

客户:

#?include?<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<sys/types.h>
void main()
{ 
   struct sockaddr_in server;
   int sock;
   char buffer[20];

   printf("Enter a string :");
   scanf("%s",buffer);

   server.sin_family = AF_INET;
   server.sin_port = 2000;
   server.sin_addr.s_addr = inet_addr("127.0.0.1");
   sock = socket(AF_INET,SOCK_STREAM, 0);

   connect(sock, (struct sockaddr*) &server, sizeof(server));
   send(sock, buffer, sizeof(buffer), 0);
   recv(sock, buffer, sizeof(buffer), 0);

   printf("The reverse string is: %s",buffer);
   printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

服务器:

?#?include?<stdio.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<string.h>
void main()
{ 
   struct sockaddr_in server, client;
   char buffer[20], temp;
   int n, sock, newsock, i, j;

   sock = socket(AF_INET, SOCK_STREAM, 0);
   server.sin_family = AF_INET;
   server.sin_port = 2000;
   server.sin_addr.s_addr = inet_addr("127.0.0.1");
   bind(sock, (struct sockaddr*) &server, sizeof(server));

   listen(sock, 2);
   n = sizeof(client);
   new sock = accept(sock, (struct sockaddr*) &client, &n);
   for(;;)
   {
      recv(newsock, buffer, sizeof(buffer), 0);
      i = 0; 
      j = strlen(buffer) - 1;
      while(i<j)
      { 
         temp = buffer[i]; 
         buffer[i] = buffer[j]; 
         buffer[j] = temp; 
         i++; 
         j--;
       }
   send(newsock, buffer, sizeof(buffer), 0);
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我运行它并假设我输入字符串为"你好,你好吗"但结果只是"olleh"并且跳过句子的其余部分.我在这里错过了什么吗?

MBy*_*ByD 6

你的问题在scanf函数的早期开始,%s直到第一个空格(就在"你好"之后).你需要阅读直到行尾(getline可以为你做).