while循环中的Send()Recv()
我正在用c语言编写一个服务器/客户端聊天程序。除了在服务器端打印第二个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
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如果可能的话,你能给我一个代码吗?提前谢谢