我正在进行 NAT 穿透的过程。
场景如下:我有两部 Android 手机,我想使用 HTTP 服务器(两个设备都在 NAT 后面)将它们连接起来(套接字)。
目前为止,两个客户端连接到 HTTP 服务器,HTTP 服务器记录了它们的 IP 地址和端口。
然而,有一个小问题,因为我使用 Java HttpDefaultClient(),每次从客户端发送请求到服务器时,它都会更改端口。好吧,这听起来像是一个简单的问题:让我们使用 Socket() 来实际维护与服务器之间的有效 TCP 连接。
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
我将使用这个类,并将 localPort 设置为一些我会记住的随机数字。 现在我再重复所有步骤,这次看起来端口不会改变,就像我想要的那样。
现在,在我获取到对手的 IP 和端口(他也在 NAT 后面)之后,理论上我可以断开服务器连接,并使用我已经用于主机客户端服务器的同一 localPort?
除非,现在我有一个问题: 1)如果我关闭 HTTP 服务器套接字,NAT 是否会明白并删除端口映射?(那很糟糕) 2)对称锥形 NAT 是如何传递的? 3) STUN 库是否以某种不同的方式工作?