您好,我正在使用 C 语言开发多线程服务器 (TCP),对此我有一点问题。一切正常,多个线程可以连接到服务器,但是每当客户端写入“exit”(这是客户端写入“exit”字符串时的条件,他/她会断开与服务器的连接)服务关闭本身也。因此,通过其他线程的通信会丢失。但是,从逻辑上讲,即使某些当前客户端断开连接,它也应该等待其他客户端。这是 main 的一部分,服务器处于等待客户端的无限循环中。hsock
是socket的id属于服务器,csock
是客户端的id。
main(){
.
.
.
while(1){
if(counter==0)
printf("waiting for a connection\n");
csock = (int*)malloc(sizeof(int));
if((*csock = accept( hsock, (struct sockaddr*)&sadr, &addr_size))!= -1){
printf("---------------------\nReceived connection from %s\n",inet_ntoa(sadr.sin_addr));
pthread_create(&thread_id,0,&SocketHandler, (void*)csock );
counter++;
}
else{
fprintf(stderr, "Error accepting %d\n", errno);
}
}// end while
.
.
.
return 0
}
正如您所看到的,每当客户端断开连接时,服务器应该继续等待另一个线程。另一方面,这是SocketHandler
函数的最后一部分,它是一个线程函数。
void* SocketHandler(void* csock){
.
.
.
printf("Client disconnected\n");
free(csock);
return 0;
}
Afterreturn 0
语句不是必须返回到while(1)
main 中的循环。如果你能提供帮助,我会很高兴,无论如何,谢谢