我有一个P2P Java应用程序,既充当服务器又充当客户端。它给出了一个公共IP地址列表,并且应用程序尝试创建套接字通信。该列表仅包含(并且只能由公共IP地址组成)。
我让应用程序在两台机器上运行,这两台机器都在同一个NAT之后。我已转发两个端口(每台机器一个),以便它们是公共可用的,并且正确接收到任一台机器的任何传入消息(即端口转发正常工作)。
然而,当两台本地机器尝试使用公共IP相互通信时会出现问题。例如,机器A的专用IP为192.168.1.1,机器B的专用IP为192.168.1.2,它们分别在端口2001和2002上接受。两个端口都已在路由器上转发。它们都具有8.8.8.8的相同公共IP。 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后面的两台机器之间形成套接字连接?