我试图在Java中实现UDP-Holepunching的简单草图来测试它的概念,并在稍后的C/C++应用程序中使用它.
从维基百科我可以理解这个概念:让A和B成为未定义网络结构背后的客户端,C是众所周知的公共可达服务器.
这一切都优于localhost(这不是一个大惊喜),但在现实世界的例子中,这失败了.
A和B都能够连接到服务器C,服务器C获取其数据包,存储其地址和端口并将其传输到另一个客户端.但此时它失败了.A和B无法相互通信.所以我问自己哪里做错了.我花了几天时间在google和stackoverflow中搜索工作示例,但我偶然发现的是使用STUN的建议,这不是我想要的.
下面我将用Java发布我的草图,因为我不知道我的概念或实现是否有问题.
public class Server
{
public static void main(String[] args)
{
int port1 = 0, port2 = 0;
String address1 = null, address2;
byte[] bytes = new byte[1024];
try
{
System.out.println("Server waiting");
DatagramSocket ds = new DatagramSocket(789);
while(!Thread.interrupted())
{
DatagramPacket p = new DatagramPacket(bytes, bytes.length);
ds.receive(p);
if(port1 == 0)
{
port1 = p.getPort();
address1 = p.getAddress().getHostAddress();
System.out.println("(1st) Server received:" + new String(bytes) + " from " …Run Code Online (Sandbox Code Playgroud)