4

我想编写一个点对点网络应用程序并遇到以下问题。

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

两者之间的通信应该只使用一个套接字,因为双向通信就足够了。这个问题的优雅解决方案是什么?

谢谢!

4

1 回答 1

6

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

于 2013-01-30T21:12:20.203 回答