【问题标题】:Do you need extra sockets to have 3-way communication?您是否需要额外的套接字才能进行 3 路通信?
【发布时间】:2011-04-03 17:17:26
【问题描述】:

我有一个使用send()recv() 的TCP 客户端/服务器连接。这在全双工下工作得很好。但是,如果我希望第 3 方能够在会话中加入并在此线路上进行通信,它是如何实现的?我需要另一个插座吗?

【问题讨论】:

    标签: c sockets unix networking


    【解决方案1】:

    是的,您需要第二个插座。 TCP 套接字是面向连接的,因此它们仅用于管理 2 台主机之间的单个连接。

    通常,您可以使用在众所周知的端口上打开的套接字来建立从客户端到服务器的连接。然后,一旦建立连接,您就可以将其传输到另一个套接字。

    【讨论】:

    • 只有第三个?如果我希望向用户 A 和用户 B 广播消息,以及接收来自用户 A 的消息,我是否只需要一个额外的套接字?
    • @cellpho;每个双向通信通道都需要一个套接字。因此,如果您有 2 个客户端和一台服务器,则至少需要在服务器中打开 2 个套接字。当然,除非你改用 UDP,但 UDP 肯定更难管理。
    • @0verbose 感谢您的帮助。显然,这些仍然必须在同一个端口上,对吗?只是为了确保我在正确的轨道上!另外,在继续前进之前,我不必等待两个连接到 finsih 吗?我可以在会话中连接第二个套接字而不必多线程?
    • @cellpho: 每个套接字必须使用不同的端口
    • @0verbose: 可以在不需要多线程的情况下设置这些,额外的套接字可以在以后任意时间连接吗?还是您必须等待两者连接?
    【解决方案2】:

    如果您不限于 TCP,IP multicast 和其他基于它的协议可能是一个选项,具体取决于您的应用程序。

    【讨论】:

      【解决方案3】:

      另一种选择可能是使用无连接的 UDP。每个数据报将包含发送者。但是,您可以根据无序、不可靠的数据报构建有意义的对话流。

      【讨论】:

      • 最后一部分可能被证明是非常重要的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      相关资源
      最近更新 更多