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

标签 sockets p2p

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

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

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

谢谢!

最佳答案

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

关于sockets - 使用一个套接字进行对等通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14611169/

相关文章:

c# - 区 block IP地址

ios - 操作无法完成。对等方重置连接

c# - 在 C# 中传输数据包时如何正确保持 UI 更新?

java - 如何在android中进行点对点VoIP通话

p2p - Skype 或 Hamachi 如何使用对称 NAT 连接用户?

python - 尝试实现非阻塞 python tcp 多个端口出现奇怪的异常

sockets - 为什么不在 Unix TCP/IP 服务器上使用 SO_REUSEADDR?

windows - Windows 上的 HOSTAPD/WPA_SUPPLICNAT

ios - GKSession 模式对等 : How to automatically connect two peers without any button/confirmation?

javascript - 为在线多人游戏设置点对点网络