【问题标题】:socket data emiter c++套接字数据发射器 C++
【发布时间】:2015-11-14 04:03:06
【问题描述】:

我在线程和套接字方面遇到了一些同步问题。我需要一个线程来接收套接字上的传入连接(并记住要响应的客户端数据)和其他线程来设置帧并将当前帧发送到列出的客户端。所以我想知道是否有可能(有点)将我的数据帧放入服务器套接字,这样每个人都可以在服务器不知道的情况下从套接字读取当前帧。

服务器只会用一些数据向其套接字发送垃圾邮件,而客户端将在没有服务器操作的情况下获取数据。这可能吗?怎么样?

我目前的做法很混乱,我不喜欢:

  • 服务器正在一个线程上监听传入的传输,并在接收到这些数据后,将客户端数据添加到列表中。
  • 在其他线程服务器上正在向列表中的所有客户端发送数据。

编辑:

我想将数据发送到允许客户端读取的某种缓冲区。 (客户端不必读取服务器发送的所有消息,仅在客户端请求时包含一个缓冲区),如果可能的话,我不希望服务器注意到客户端正在从缓冲区读取。

现在线程使用 uniqe_lock 同步

【问题讨论】:

  • 您的问题很难理解:您是否尝试将相同的数据传输给多个客户端,并且希望一次性发送,而不是每次都重复发送?
  • 您能提供一个mvce 吗?
  • 在考虑套接字之前,请描述你想要什么。到目前为止我所理解的是:1.客户端连接到服务器,并说它想要数据2.服务器为该客户端准备一个框架3.客户端回来读取自己的数据。我猜不到的是:如何通过 IP 识别客户端(它们是?)?凭身份证?他们是否读取自己的数据或所有数据或最后一个数据(所有客户端都相同)。设计应该不难......一旦我们知道了预期!

标签: c++ multithreading sockets


【解决方案1】:

您所描述的可能是MultiCast。具体来说,IP MultiCast(我认为)。

搜索会发现许多有用的资源。 This one 看起来很简洁,包括编码示例(尽管我不确定它的最新情况)。

如果您只是向 LAN 传输,那么广播也可以。

【讨论】:

  • 我需要通过网络传输
  • 然后就是MultiCast。
  • 现在我使用 UDP 协议,但是服务器仍然需要从客户端接收初始消息才能将客户端添加到列表中。我想绕过这一步。我不知道如何避免列表迭代
  • 这就是多播正在解决的问题。服务器不需要知道客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2018-05-23
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多