2013-04-26 86 views
0

我最近试图建立一个简单的对等网络。在我的概念中,同伴尝试使用第三方“引导”对等源来打开端口并与尽可能多的对等端建立连接以找到对等端。我很快发现一个问题:如何确保对等连接不会加倍(服务器 - >客户端,客户端 - >服务器)?

  1. 同行一个开放的端口6013,并宣布他的存在
  2. 同行B打开一个端口31235,并宣布他的存在
  3. 节点A接收到B的公告,并连接到对等体B使用3111作为它的源端口
  4. 对等体B接收A的公告,并连接到对等体B,使用7777作为它的源端口

此时我们既是连接到B上的服务器套接字nd B连接到A的服务器套接字,但没有办法确定它们实际上是相互通信的主机 - 客户端连接的源端口不建议它们打开哪个服务器端口。而且,我不能通过他们的IP地址来识别对等点,因为他们可能在某种NAT后面。

我能做些什么来避免这种情况?在我的情况下,加倍连接不应该导致解除同步问题,但这种冗余可能会导致我不想要的开销。

回答

1

每个节点都应该为自己引入一个它生成的唯一GUID。然后,当A和B彼此建立连接时,他们可以通过简单地比较它们的GUID来决定谁将成为主人 - 具有较大GUID的节点变成主人并保持它的连接(即发起连接)。具有较小GUID的节点关闭发起连接并保持接收到的连接。

+0

谢谢,听起来像一个很好的解决方案! – d33tah 2013-04-26 16:49:17