我有一个基本的linux套接字程序,主要是从客户端接受字符串发送到服务器。当"退出"键入,我的客户端程序结束,但服务器打印出来"退出"无休止地直到你杀了这个程序。要么我没有正确读取字符串,要么我的逻辑关闭。
代码部分......
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;
答案 0 :(得分:2)
memset
recv
buf
recv
不会在从socket读取的字符串末尾添加'\0'
,
你也应该检查recv
是否读取了整个4个字节,然后改变:
strcmp(buf, "quit\n")
到
strncmp(buf, "quit\n",4)// if you are not sure client sends \n