c - 使用 select() 在现有客户端或新客户端之间进行选择 (C)

标签 c select client server

我正在编写一个小型服务器/客户端程序。我不确定如何使用 select() 在已连接到服务器的客户端之间进行选择,并添加新客户端。

即:服务器程序将启动并监听客户端。如何使用 select 语句来了解服务器是从现有客户端还是新连接接收数据?

服务器是否总是必须listen()accept()每个新客户端?

谢谢。

最佳答案

在开始处理选择器之前,您应该阅读一些有关非阻塞 I/O 或异步网络的内容。基本上,您的选择器所做的就是循环您创建的文件描述符,并检查是否有人想要执行以下操作之一:

  • 阅读
  • 接受
  • 连接

我可以进一步了解它是如何工作的,但如果您确实想知道,请搜索 react 器模式以及通过事件进行编程的工作原理。

无论如何,检测新连接或已存在的连接可能是微不足道的,也可能不是那么微不足道的,具体取决于您希望对所执行的操作拥有多少控制权。

首先。您在选择器上注册您的服务器套接字。该套接字将永远保持监听状态,当客户端连接时,将触发接受事件并发生一个选择器周期。这将创建另一个文件描述符,您必须在选择器中注册该文件描述符。

从现在开始,您必须控制您的连接意图。你想读书吗?写?不仅如此,因为这是异步编程,您不能或不应该阻止信息必须以 block 的形式传输。您将负责接收所有数据 block 并协调所有文件描述符。这是重要的部分。

如果您想了解其他任何信息,请说出来,我将编辑此答案。

关于c - 使用 select() 在现有客户端或新客户端之间进行选择 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221860/

相关文章:

c - 访问C中的字符串数组

在 C 中创建一个新的、已停止的进程

jquery - 如何让 selectize 插入选项的文本,而不仅仅是值?

mysql - 计算列中的不同值,如果在Where子句中没有找到则返回零

authentication - ZeroMQ:如何获取已连接客户端的地址?

c - 对 rand() 的 undefined reference 甚至认为它已被包含和定义

c - 如何让 child 等待 parent 返回(而不是退出)然后自杀?

iphone - 如何标记多个 UITableViewCell 并对标记的单元格执行操作?

Java 服务器套接字响应

java - FTP客户端/服务器登录验证