我正在尝试制作一个具有多人游戏支持的简单pong游戏,但是当我尝试使用外部ip连接到服务器应用程序时,它会失败。
我尝试过的
localhost,127.0.0.1和192.168.0.10都可以工作。
当我检查端口是否已使用外部工具打开时,如果我正在运行服务器,它将始终立即返回true。
关闭防火墙或添加例外没有帮助。
ping我的外部IP返回即时响应。
用Java和异常创建套接字的代码
服务器套接字创建
serverSocket = new ServerSocket(7777);
for(;;){
socket = serverSocket.accept();
}
客户端套接字创建
socket = new Socket(IP, 7777);
客户端抛出异常
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Client.<init>(Client.java:93)
at Client.main(Client.java:153)
最佳答案
根据您告诉我们的内容,设置如下所示:
您已将端口7777从外部IP转发到内部IP B
您的服务器侦听内部IP B和127.0.0.1
您的客户端成功连接到内部IP B:7777和127.0.0.1:7777
如果您的客户端指向外部IP,则无法连接:7777
此设置仅适用于大多数家庭路由器/ NAT网关,它们将不会端口转发用于发自内部网络本身的外部IP的TCP连接-只会端口实际上来自外部的转发连接(互联网)。