Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
while循环中的Send()Recv()_C_Sockets - Fatal编程技术网

while循环中的Send()Recv()

while循环中的Send()Recv(),c,sockets,C,Sockets,我正在用c语言编写一个服务器/客户端聊天程序。除了在服务器端打印第二个recv()之前客户端发送的用户名外,其他一切都正常工作。但我的指纹是在第二次录像之后。它应该首先从客户端读取消息,然后打印如下内容 乔治:嗨 而不是 乔治: 乔治:嗨 我做错了什么?提前谢谢 服务器 recv(newSocket,name,sizeof(name),0); while(1){ recv(newSocket,buffer,sizeof(buffer),0); if (strcmp(buffer

我正在用c语言编写一个服务器/客户端聊天程序。除了在服务器端打印第二个recv()之前客户端发送的用户名外,其他一切都正常工作。但我的指纹是在第二次录像之后。它应该首先从客户端读取消息,然后打印如下内容

乔治:嗨

而不是

乔治:

乔治:嗨

我做错了什么?提前谢谢

服务器

recv(newSocket,name,sizeof(name),0);

while(1){
    recv(newSocket,buffer,sizeof(buffer),0);
    if (strcmp(buffer,"exit\n")==0){
       printf("%s logout\n",name);
       break;}
else
    printf("%s:%s",name,buffer);
}
客户

printf("Give a username");
scanf("%s",name);
send(clientSocket,name,sizeof(name),0);

while(1){
   fgets(buffer,sizeof(buffer),stdin);
   send(clientSocket,buffer,sizeof(buffer),0);
   if (strcmp(buffer,"exit\n")==0)
      break;
}

您必须完全正确地处理从系统调用返回的reult,尤其是recv()。您必须确保需要以NUL结尾的字符数组的C库调用正好得到这样的结果。您必须将TCP接收到的数据作为字节流处理,而不是作为任何大于一个字节的消息处理。@thingywot我怎么做,先生?man recv()将是一个很好的开始:)它可以返回大于零、零或小于零的整数。它们都有不同的含义,你必须处理好它们。您需要一些状态机,它连续调用recv,直到收到NUL(或者直到满足字节级协议的其他条件)。无法显示示例,因为我正在使用手机。我正在删除我的答案,因为它是无效的。@nucleon如果可能的话,你能给我一个代码吗?提前谢谢