【问题标题】:server that supports Unix and TCP clients支持 Unix 和 TCP 客户端的服务器
【发布时间】:2020-09-19 14:22:38
【问题描述】:

我正在用 C (LINUX) 制作服务器/客户端程序。我在一个文件夹中有 4 个程序。一个clientUNIX、一个clientTCP、一个serverUNIX和一个serverTCP。他们都完美地工作。现在,我的目标是制作一个支持两个客户端的服务器。

对我来说,最简单的方法是启动一个新程序 (serverTCPUNIX),它执行以下操作:

  • 在 main() 中,创建一个线程来处理 TCP 客户端和另一个线程来处理 UNIX 客户端。

有没有更好的方法来实现这一点?因为这样,我将有 2 个线程循环通过客户端。我想知道我是否可以只有 1 个线程和 1 个循环同时支持这两种类型的客户端。

谢谢。

【问题讨论】:

  • 欢迎来到 SO。确定您是否只能使用 1 个线程,我们需要查看您当前服务器的外观。他们已经可以用 1 个线程处理多个 TCP 连接了吗?
  • 可以。服务器进入一个循环,接受客户端连接,并创建线程来处理它们。
  • 这意味着当您谈论“只有 1 个线程”时,您实际上是指“1 个控制线程和许多其他线程”,对吗?
  • 是的,你是对的。我的意思是 1 个线程接受连接。目前,我有 1 个线程只接受 TCP 客户端连接,另一个只接受 UNIX 客户端连接。除此之外,我为每个客户提供 1 个线程来处理它们。我想要的是只有 1 个线程可以同时接受 TCP 连接和 UNIX 连接。可能会用到select(),但是我不是很明白它的用途。

标签: c sockets unix server client


【解决方案1】:

也许您可以将服务器上的套接字切换到非阻塞模式,然后使用select() 等待它们中的任何一个接收连接并根据需要进行处理,例如通过创建处理客户端请求的线程,然后返回相同的select() 等待下一个传入连接。

【讨论】:

  • 你能举例说明 select() 的用法吗?我知道它的存在,但从不明白它的真正作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 2016-07-28
相关资源
最近更新 更多