C “当”时服务器程序未结束;“退出”;输入的字符串

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

我有一个基本的LinuxSocket程序正在运行,它接受来自客户端的字符串并发送到服务器。当输入“退出”时,我的客户机程序结束,但服务器程序会无休止地打印“退出”,直到您终止该程序。要么我没有正确读取字符串,要么我的逻辑不正确

代码段

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”否!这是从哪里来的?