Sockets 使用一个套接字进行对等通信

Sockets 使用一个套接字进行对等通信,sockets,p2p,Sockets,P2p,我想写一个对等网络应用程序,但有以下问题 网络中的两个节点A和B试图同时建立彼此的连接。当它们都接受另一方的连接时,将打开两个TCP套接字 两个插座之间的通信只能使用一个插座,因为它足以在两个方向上进行通信。这个问题的优雅解决方案是什么 谢谢 您不应该同时尝试建立两个同时连接。这是p2p设计中的一个缺陷。这两个对等方需要相互协调(例如通过一个中心服务器交换消息,它们都连接到一个中心服务器,并且都知道自己是谁)。首先需要决定谁在倾听,谁在连接。一个对等方只打开一个侦听套接字,该信息被发送到另一个对

我想写一个对等网络应用程序,但有以下问题

网络中的两个节点A和B试图同时建立彼此的连接。当它们都接受另一方的连接时,将打开两个TCP套接字

两个插座之间的通信只能使用一个插座,因为它足以在两个方向上进行通信。这个问题的优雅解决方案是什么


谢谢

您不应该同时尝试建立两个同时连接。这是p2p设计中的一个缺陷。这两个对等方需要相互协调(例如通过一个中心服务器交换消息,它们都连接到一个中心服务器,并且都知道自己是谁)。首先需要决定谁在倾听,谁在连接。一个对等方只打开一个侦听套接字,该信息被发送到另一个对等方,以便它知道连接到哪里。如果该连接失败(即,侦听对等方位于NAT/防火墙后面),则需要通知对等方并做出交换角色的决定。先前连接的对等方现在打开一个侦听套接字,该信息被发送到先前侦听的对等方,以便它知道连接到哪里。如果该连接失败(即,正在侦听的对等方也在NAT/防火墙后面),那么在没有额外帮助(例如NAT穿孔)的情况下,两个对等方之间的直接连接是不可能的。在某些情况下,直接连接是不可能的,因此它们之间交换的数据必须通过中央服务器进行代理。

非常感谢。我想我可以用一种更简单的方法逃脱。在两者之间使用一个中央服务器“中介”将需要另一个协议,这意味着需要更多的开发工作,并在整个过程中引入更多的复杂性。然而,我认为最好是这样做。谢谢。我知道的大多数p2p协议都是按照我概述的方式工作的。两个对等点都连接到一个共享服务器,该服务器跟踪它们的连接信息,然后对等点向服务器请求该信息,并让服务器根据需要协调直接连接。