C “当”时服务器程序未结束;“退出”;输入的字符串
我有一个基本的LinuxSocket程序正在运行,它接受来自客户端的字符串并发送到服务器。当输入“退出”时,我的客户机程序结束,但服务器程序会无休止地打印“退出”,直到您终止该程序。要么我没有正确读取字符串,要么我的逻辑不正确 代码段C “当”时服务器程序未结束;“退出”;输入的字符串,c,string,unix-socket,C,String,Unix Socket,我有一个基本的LinuxSocket程序正在运行,它接受来自客户端的字符串并发送到服务器。当输入“退出”时,我的客户机程序结束,但服务器程序会无休止地打印“退出”,直到您终止该程序。要么我没有正确读取字符串,要么我的逻辑不正确 代码段 while (1) { //fetch message from client and write to stdout num_client_bytes = recv(client_sockfd, buf, LEN, 0); if (-1
while (1)
{
//fetch message from client and write to stdout
num_client_bytes = recv(client_sockfd, buf, LEN, 0);
if (-1 == num_client_bytes)
{
perror("server-- recv failed");
}
else
{
printf("client msg: %s", buf);
if (0 == strcmp(buf, "quit\n"))
{
break;
}
}
}
//remove local socket file and close sockets
unlink(SOCKET_NAME);
close(client_sockfd);
close(server_sockfd);
return 0;
在
recv
recv
不会在从套接字读取的字符串末尾添加'\0'
,
此外,您还应检查recv
是否读取了整个4个字节,然后更改:
strcmp(buf, "quit\n")
到
在
recv
recv
不会在从套接字读取的字符串末尾添加'\0'
,
此外,您还应检查recv
是否读取了整个4个字节,然后更改:
strcmp(buf, "quit\n")
到
你确定你也发了这条新线吗?还是字符串终止符?如何发送字符串?printf()打印什么?strlen()在buf上的结果是什么?@Someprogrammerdude据我所知,是的。我没有摆脱终止null。@指示器服务器端将无休止地打印消息“退出”。buf上strlen()的结果始终是正确的字符串。那么,长度为6的字符串与长度为5的“quit\n”不匹配。您确定也发送换行符吗?还是字符串终止符?如何发送字符串?printf()打印什么?strlen()在buf上的结果是什么?@Someprogrammerdude据我所知,是的。我没有摆脱终止null。@指示器服务器端将无休止地打印消息“退出”。buf上strlen()的结果始终是正确的字符串。长度为6的字符串与长度为5的“quit\n”不匹配。这取决于客户端发送的内容“您需要在recv之前存储buf”否!这是从哪里来的?这取决于客户端发送了什么“您需要在接收之前设置buf”否!这是从哪里来的?