我正在研究 NAT 和 STUN 协议,但我还没有理解它们,所以我尝试在 Java 中实现 STUN。
假设我有 2 台计算机通过 2 个各自的全锥 NAT 设备连接到 Internet,我正在尝试用 Java 实现 STUN 协议,我只是实现了当 2 个对等方都知道彼此的外部 IP 和端口时的部分,其中一个(我们称这个对等点是“客户端”)正在尝试向另一个(这个对等点是“服务器”)发送消息。我做了这样的事情:
在服务器上,我通过以下方式打开了一个套接字:
ServerSocket sv = new ServerSocket(0);
然后我通过这个站点http://www.whatismyip.com获取服务器的 ip ,并获取打开的端口:
System.out.println(sv.getLocalPort());
在客户端,我通过以下方式向服务器发送消息:
Socket sk = new Socket(serverIP, serverPort); PrintWriter pw = new PrintWriter(sk.getOutputStream(), true); pw.print("Hello there"); pw.close(); sk.close();
但是服务器收不到任何东西,所以我有一些问题:
我认为我通过上述方式获得的服务器外部端口不是另一个对等方将用于向服务器发送消息的外部端口,那么在 Java 中获取它的正确方法是什么?
我的做法是在与 STUN 服务器交换后 2 个对等方知道彼此的外部 ip 和端口时实现 STUN 部分的正确方法?如果不是,那么正确的方法是什么?
希望大家给我解释一下,谢谢大家!