0

我有一个 P2P Java 应用程序,它既充当服务器又充当客户端。它会得到一个公共 IP 地址列表,并且应用程序会尝试创建套接字通信。该列表仅包含(并且只能包含)公共 IP 地址。

我的应用程序在两台机器上运行,它们都在同一个 NAT 后面。我已经转发了两个端口(每台机器一个),以便它们是公开可用的,并且正确接收到任何一台机器的任何传入消息(即端口转发工作正常)。

但是,当两台本地机器尝试使用公共 IP 相互通信时,就会出现问题。例如,机器 A 的私有 IP 为 192.168.1.1,机器 B 的私有 IP 为 192.168.1.2,它们分别接受端口 2001 和 2002。两个端口都已在路由器上转发。它们都具有相同的公共 IP 8.8.8.8。A 尝试使用公共 IP 连接到 B 会导致数据包捕获,如下所示:

192.168.1.1:4000 -> 8.8.8.8:2002
192.168.1.2:2002 -> 192.168.1.1:4000

这个结果是 B 的监听套接字从不接受。但是,如果我改用 B 的本地 IP,一切都很好:

192.168.1.1:4000 -> 192.168.1.2:2002
192.168.1.2:2002 -> 192.168.1.1:4000

有没有办法使用它们的公共 IP 地址在同一 NAT 后面的两台机器之间形成套接字连接?

4

0 回答 0