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

时间:2013-01-30 18:30:12

标签: sockets p2p

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:5)

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