我想编写一个对等网络应用程序,并且遇到以下问题。
网络中的两个节点A和B试图同时建立彼此的连接。当它们两个都接受对方的连接时,将打开两个TCP套接字。
两者之间的通讯只应使用一个插座,因为它足以在两个方向上通讯。有什么绝妙的解决方案?
谢谢!
您不应该尝试同时建立两个同时的连接。这是您的p2p设计中的缺陷。这两个对等方需要相互协调(例如,通过它们都已连接并知道他们都是谁的中央服务器交换消息)。首先需要确定谁在听和谁在连接。一个对等方仅打开一个侦听套接字,并且该信息会发送到另一对等方,因此它知道连接的位置。如果该连接失败(即,侦听对等方位于NAT /防火墙之后),则需要通知对等方并做出交换角色的决定。现在,先前连接的对等方将打开一个侦听套接字,并且该信息将发送到先前侦听的对等方,以便它知道要连接的位置。如果该连接失败(即,正在监听的对等方也位于NAT /防火墙之后),如果没有其他帮助(例如NAT打孔),则无法在两个对等方之间建立直接连接。在某些情况下,直接连接是不可能的,因此它们之间交换的数据必须通过中央服务器代理。
| 归档时间: |
|
| 查看次数: |
5589 次 |
| 最近记录: |