我需要在C中实现服务器/客户端代码。
服务器当时需要能够准确接受四个连接
我不能让这个工作。到目前为止我做了什么:
1.创建一个插座
2.将其设置为非阻塞:fcntl(sock,F_SETFL, O_NONBLOCK);
绑定它
4.听:listen(sock, 4);
我不太确定的部分是如何接受客户端的连接。我的代码看起来像这样:
while (1) {
if ((sockfd = accept(sock, (struct sockaddr *) &client_addr, &client_size)) < 0) {
perror("Error\n");
}
read(sockfd, &number, sizeof(number));
write(sockfd, &number, sizeof(number));
}
当我执行客户端和服务器代码时,客户端似乎正在向套接字写入内容,哪个服务器从未接收过,整个执行阻止。 接受来自多个客户的连接的正确方法是什么?
答案 0 :(得分:2)
如果您不想使用多线程,这种服务器的一个基本工作流程是这样的:
fd_set
个文件描述符以供查看fd_set
select
等待套接字准备好从fd_set
中有可用数据This page显示了上述过程的流程图。 (向下滚动以获得一个非常好的注释示例。)
This page充满了select
的例子。
答案 1 :(得分:1)
你应该看看select
的男人。它会告诉您何时以及哪些套接字可以写入/读取