gpt4 book ai didi

在 C 编程中计算使用 TCP/IP 套接字连接到服务器的客户端数量

转载 作者:行者123 更新时间:2023-11-30 14:32:38 24 4
gpt4 key购买 nike

我必须在 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;
}

正如您在我的屏幕截图中看到的:

Console messages

如果我检查从 client1 连接的客户端数量,它将始终显示“1”;如果我检查 client2 它总是显示“2”。连接的客户端数量取决于我发短信的客户端。有什么错误吗?

最佳答案

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

关于在 C 编程中计算使用 TCP/IP 套接字连接到服务器的客户端数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59736865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com