P2P通信不起作用

时间:2015-07-09 16:51:05

标签: java p2p stun

我要做的是,将数据从我的PC(本地IP)发送到互联网上的另一台PC(私有IP)。我写了一个java程序,用stun resolver发送/接收消息。

程序:

Resolve stun and get public IP and port
Send message with same socket(resolve stun) to another program.
Receiving with same socket(resolve stun) in different thread.

我们正在通过stun解析彼此的公共IP /端口数据。我不确定其他目的,但我的网络有Port restricted clone NAT。我做错了吗?

注意: NAT已经过测试。我通过昏迷的决心与服务器和本地移动设备进行了沟通。

修改

我没有防火墙。我也停止了ufw服务。

系统:

Ubuntu 14.04
Mac 10.10.3

2 个答案:

答案 0 :(得分:2)

简短摘要:在发现你的套接字的STUN ip / port之后,你需要发送一个1字节的"打孔数据包"到远程端点的IP和端口。这将允许来自该地址的传入流量。另一方应该做同样的事情。

答案很长:我以前的write-up on P2P socket programming here.

答案 1 :(得分:1)

你需要在两侧的NAT上打一个洞,以便NAT允许传入的数据包。你应该用低ttl值打洞。因此,您发送的用于打孔的数据包不会到达其他端NAT。如果它确实比你之后所有的数据包从你的IP到NAT可能被阻止。并非所有NAT都配置如下。这可能是你们两个都没有收到任何东西的原因。

还有另一个原因。您的其他NAT可能是对称NAT。在这种情况下,您将需要TURN服务器来建立连接。

如果其他方的NAT是Full Cone,你也不需要打洞。所以你真的需要知道对方的NAT类型来找到你的问题。