多客户端服务器套接字不会打印客户端消息

时间:2016-12-02 05:50:51

标签: c sockets

我正在尝试使用线程实现具有多客户端的客户端 - 服务器应用程序。只是为了尝试,我想打印来自每个客户端的消息,但是当我从客户端发送消息时,服务器不会打印任何内容。

服务器(线程代码)

void comunicationHandler(void *socket)
{
    int sock = *(int*) socket;
    char msg[2000];

    while ((strcmp(msg, "!quit")) != 0) {
        if (recv(sock, msg, 2000, 0) < 0)
            puts("Error recv");
        printf("%s", msg);
    }
    puts("Client Disconnected\n");
}

当我发送“!quit”时,服务器进入无限循环打印消息

客户端

for(;;) {
    printf("\nInserisci il msg: ");
    scanf("%s", msg);
    if (strcmp(msg, "!quit") == 0)
        break;
    write(sd, msg, 2000);
}

2 个答案:

答案 0 :(得分:3)

您的代码存在多个问题:

  1. TCP是基于流的,不能保证您发送的所有字节都将在另一方面一次性接收。您需要修改代码以检查接收的字节数是多少,并且它至少等于&#34;!quit&#34;的大小。在你进入&#34; strcmp&#34;之前比较。
  2. 一旦收到等于&#34;!quit&#34;
  3. 大小的缓冲区,最好将null终止。
  4. 当您打算仅发送&#34;!quit&#34;时,不清楚为什么要从客户端发送2000字节的缓冲区。根据需要修改并发送适当的大小
  5. 检查recv返回值是否也为0
  6. 完成作业后,在服务器和客户端中断开循环。

答案 1 :(得分:1)

  

服务器进入无限循环

您希望针对recv()测试0的结果,并在此情况下退出。 0表示客户端有序地关闭了连接。