【问题标题】:Count number of clients connected to a server using TCP/IP socket in C programming在 C 编程中使用 TCP/IP 套接字计算连接到服务器的客户端数
【发布时间】:2020-01-14 23:53:31
【问题描述】:

我必须在 C 编程中计算使用互斥锁和 TCP/IP 套接字连接到我的服务器的客户端数量。

这是我的server.c 源文件:

int numberOfClientsConnected = 0;

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

int main ()
{
    // ... creation, binding and listen ...

    while (1) {

        clientSocket = accept(serverSocket, (struct sockaddr*)&newAddress, &addrSize);


        pthread_mutex_lock(&mutex);

        numberOfClientsConnected++;

        pthread_mutex_unlock(&mutex);

        child = fork();

        if (child == 0) {

            close(serverSocket);

            while (1) {
                recv(clientSocket, buffer, 1024, 0);

                if (strcmp(buffer, ":exit") == 0) {
                    printf("%s:%d left\n", inet_ntoa(newAddress.sin_addr), ntohs(newAddress.sin_port));
                    pthread_mutex_lock(&mutex);

                    numberOfClientsConnected--;

                    pthread_mutex_unlock(&mutex);

                    break;
                }
                else {
                    printf("%s:%d wrote: %s\n", inet_ntoa(newAddress.sin_addr), ntohs(newAddress.sin_port), buffer);
                    printf("There are %d client(s) connected\n", numeroDiClientAttualmenteConnessi);
                    // Invio del messaggio
                    send(clientSocket, buffer, strlen(buffer), 0);
                }
            }

        }

    }

    close(clientSocket);

    return 0;
}

正如你在我的截图中看到的那样:

如果我检查从 client1 连接的客户端数量,它将始终显示“1”;如果我与 client2 核对,它总是会显示“2”。也就是说,连接的客户端数量取决于我发短信的客户端。怎么回事?

【问题讨论】:

    标签: c sockets tcp


    【解决方案1】:

    fork() 创建一个新进程,而不是一个新线程。变量在进程之间不共享。您的子进程获得了变量的副本,并且只能看到变量被派生时的值。

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-08
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多