P2P通信在Java中不起作用

P2P通信在Java中不起作用,java,p2p,stun,Java,P2p,Stun,我想做的是,将数据从我的PC(本地IP)发送到internet上的另一台PC(专用IP)。我编写了一个java程序,用stun解析器发送/接收消息 节目: 我们正在向对方的公共IP/端口发送数据,该端口由stun解析。我不确定另一端,但我的网络有端口限制克隆NAT。我做错什么了吗 注意:NAT已测试。我用stun resolve与服务器和本地移动设备通信 编辑 我没有防火墙。我还停止了ufw服务 系统: 简短总结:在发现套接字的STUN ip/端口后,需要向远程端点的ip和端口发送一个1字节的“

我想做的是,将数据从我的PC(本地IP)发送到internet上的另一台PC(专用IP)。我编写了一个java程序,用stun解析器发送/接收消息

节目: 我们正在向对方的公共IP/端口发送数据,该端口由stun解析。我不确定另一端,但我的网络有
端口限制克隆NAT
。我做错什么了吗

注意:NAT已测试。我用stun resolve与服务器和本地移动设备通信

编辑 我没有防火墙。我还停止了
ufw
服务

系统:
简短总结:在发现套接字的STUN ip/端口后,需要向远程端点的ip和端口发送一个1字节的“穿孔包”。这将允许来自该地址的传入流量。另一方也应该这样做


详细回答:我之前的

您需要在两侧的NAT上打一个孔,以便NAT允许传入的数据包。你应该用较低的ttl值打孔。这样你送去打孔的包就不会到达另一边了。如果没有,那么之后从ip到NAT的所有数据包都可能被阻塞。并非所有NAT都是这样配置的。这可能是你们俩没有收到任何东西的原因

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


另外,若另一侧的NAT为全圆锥,则无需打孔。因此,您确实需要了解对方的NAT类型才能找到您的问题。

谢谢您的快速回复。关于打孔,当我们都知道我们的IP/端口(公共)时,我们就开始互相发送数据。但我们从未收到任何消息。使用NAT遍历的P2P套接字网络非常具有挑战性,而且不是一门精确的科学。理想情况下,NAT两侧都有流量监控实用程序来诊断这些类型的问题。
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.
Ubuntu 14.04
Mac 10.10.3