При программировании C мне нужно подсчитать количество клиентов, подключенных к моему серверу с использованием сокетов mutex и 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». То есть количество подключенных клиентов зависит от того, с какого клиента я отправляю текст. В чем ошибка?