我正在编写一个小型服务器/客户端程序。我不确定如何使用 select()
在已连接到服务器的客户端之间进行选择,并添加新客户端。
即:服务器程序将启动并监听客户端。如何使用 select 语句来了解服务器是从现有客户端还是新连接接收数据?
服务器是否总是必须listen()
和accept()
每个新客户端?
谢谢。
最佳答案
在开始处理选择器之前,您应该阅读一些有关非阻塞 I/O 或异步网络的内容。基本上,您的选择器所做的就是循环您创建的文件描述符,并检查是否有人想要执行以下操作之一:
- 阅读
- 写
- 接受
- 连接
我可以进一步了解它是如何工作的,但如果您确实想知道,请搜索 react 器模式以及通过事件进行编程的工作原理。
无论如何,检测新连接或已存在的连接可能是微不足道的,也可能不是那么微不足道的,具体取决于您希望对所执行的操作拥有多少控制权。
首先。您在选择器上注册您的服务器套接字。该套接字将永远保持监听状态,当客户端连接时,将触发接受事件并发生一个选择器周期。这将创建另一个文件描述符,您必须在选择器中注册该文件描述符。从现在开始,您必须控制您的连接意图。你想读书吗?写?不仅如此,因为这是异步编程,您不能或不应该阻止信息必须以 block 的形式传输。您将负责接收所有数据 block 并协调所有文件描述符。这是重要的部分。
如果您想了解其他任何信息,请说出来,我将编辑此答案。
关于c - 使用 select() 在现有客户端或新客户端之间进行选择 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221860/