C 具有多个客户机的客户机/服务器体系结构
我需要用C实现一个服务器/客户机代码。 服务器需要能够同时接受四个连接。C 具有多个客户机的客户机/服务器体系结构,c,sockets,C,Sockets,我需要用C实现一个服务器/客户机代码。 服务器需要能够同时接受四个连接。 我不能让它工作。到目前为止我所做的: 1.创建套接字 2.将其设置为非阻塞:fcntl(sock、F_SETFL、O_NONBLOCK) 3.绑定它 4.听:听(sock,4) 我不太确定的部分是如何接受客户的连接。我的代码如下所示: while (1) { if ((sockfd = accept(sock, (struct sockaddr *) &client_addr, &client_si
我不能让它工作。到目前为止我所做的:
1.创建套接字
2.将其设置为非阻塞:
fcntl(sock、F_SETFL、O_NONBLOCK)代码>
3.绑定它
4.听:听(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));
}
while(1){
如果((sockfd=accept(sock,(struct sockaddr*)和client\u addr,&client\u size))<0){
perror(“错误”);
}
读取(sockfd和编号,sizeof(编号));
写入(sockfd,&number,sizeof(number));
}
当我执行客户机和服务器代码时,客户机似乎在向套接字写入某些内容,而服务器从未接收到这些内容以及整个执行块。
接受来自多个客户端的连接的正确方式是什么?您应该寻找选择的人。它将告诉您何时以及哪些套接字准备好写入/读取如果您不想使用多线程,这种服务器的一个基本工作流如下所示:
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));
}
- 创建文件描述符的
fd\u集
,以监视读取
- 打开插座
- 将套接字绑定到要侦听的端口
- 开始监听套接字
- 将套接字的文件描述符添加到
fd\u集合
- 虽然没有完成
- 使用
选择
等待套接字准备好从中读取
- 循环浏览
fd\u集合中具有可用数据的fd
- 如果当前fd是您的侦听套接字,请接受新连接
- 否则,它就是一个客户端fd。读一读,也许再回信
显示了上述过程的流程图。(向下滚动查看注释非常好的示例。)
关于select
的例子不胜枚举,非常感谢您的详细解释。我终于成功了!!