【问题标题】:Sockets: ability to listen and send at the same time套接字:同时监听和发送的能力
【发布时间】:2013-08-30 00:22:21
【问题描述】:

我正在想办法解决这个问题:

我的服务器需要能够完成以下两个功能:

  • 当收到中断时,服务器需要能够向所有客户端发送(多播)新的 XYZ 信息
  • 当一个新的客户端加入广播组时,它需要所说的 XYZ 信息。服务器需要能够处理来自客户端的 XYZ 读取请求。

所以服务器需要能够监听来自客户端的请求,同时在中断事件上向客户端发送信息。

我的客户需要能够执行以下两个功能:

  • 当它第一次加入广播组时,它需要能够从服务器读取 XYZ。
  • 当服务器遇到中断事件时,它会发出 XYZ。我的客户需要倾听这些信息。

我希望客户只需要在初始加入时请求 XYZ。之后,它应该只监听来自服务器的 XYZ。

这可能吗?我研究了阻塞/非阻塞和相关方法。

【问题讨论】:

  • 查看select()poll()

标签: c multithreading sockets


【解决方案1】:

理论上是的。这实际上取决于您如何设计客户端和服务器之间的对话。比如服务器需要监听和响应请求,比如“data=?”使用“data=XYZ”或者您想要打包消息。

服务器启动时需要广播,与服务器断开连接时客户端需要进入监听模式。

要实现这一点,您可能会在客户端和服务器上都使用线程,因此可能会使用一些序列化(信号量、互斥锁等)。具体来说,您可能最终会得到一个带有监听套接字的线程和另一个带有发送套接字的线程。

总的来说,这是一个中等技能的项目,但除非您以前编写过多线程应用程序或 TCP/IP 应用程序,否则这将是一次学习体验!

PS。我正在做类似的事情,只是为了好玩,所以这是可能的!

【讨论】:

  • 序列化?我相信你的意思是同步。
  • @zoska,计算机科学术语是序列化。同步意味着两个事件作为协调事件发生,而序列化意味着事件一个接一个地发生,但它们之间的时间延迟是控制或同步的。
  • 哦,该死的,我明白了。你说的对。虽然在这种情况下我从未听说过术语序列化。
猜你喜欢
  • 2011-11-26
  • 1970-01-01
  • 2011-03-15
  • 2016-05-25
  • 2011-02-15
  • 2016-10-12
  • 2016-11-06
  • 2016-07-28
  • 1970-01-01
相关资源
最近更新 更多