我目前正在C语言中通过互联网进行客户端/服务器应用程序。服务器将继续侦听来自客户端的新连接。目前我正在听cllients,但是一旦客户端连接,服务器就不会继续监听其他客户端。以下描述了与客户端连接的服务器端代码:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in sockaddr, cliaddr;
bzero(&sockaddr, sizeof(struct sockaddr_in));
bzero(&cliaddr, sizeof(struct sockaddr_in));
sockaddr.sin_family = AF_INET;
sockaddr.sin_addr.s_addr = INADDR_ANY;
sockaddr.sin_port = ntohs(atoi(argv[1]));
if(bind(sockfd, (struct sockaddr *) &sockaddr, sizeof(sockaddr)) <0) {
printf("error binding socket: %d\n", errno);
exit(1);
}
printf("binded to %d : %d\n", sockaddr.sin_addr.s_addr, htons(sockaddr.sin_port));
listen(sockfd,5);
socklen_t clilen = sizeof(cliaddr);
int newsockfd = accept(sockfd, (struct sockaddr *) &cliaddr, &clilen);
if (newsockfd < 0)
error("ERROR on accept");
printf("server connected to %d:%d\n", cliaddr.sin_addr.s_addr, htons(cliaddr.sin_port));
我假设我必须创建某种形式的线程,一旦建立连接就会分叉。但我不知道如何实现它..
非常感谢任何帮助
答案 0 :(得分:3)
以下几点可能有所帮助:
答案 1 :(得分:1)
您可以收集以下书籍以了解和了解如何在C中开发并发服务器。很难用示例解释在答案中编写并发服务器的各种方法。书中示例的源代码是可下载的,因此即使没有书也可以试用它们(您可以在同一个URL中找到)。研究代码,你会看到事情是如何运作的。
UNIX Network Programming, Volume 1, Second Edition: Networking APIs: Sockets and XTI
本书涵盖了几乎所有关于套接字编程的知识。