当"退出"服务器程序没有结束输入字符串

时间:2017-05-22 06:28:23

标签: c string unix-socket

我有一个基本的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;

1 个答案:

答案 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