我正在尝试制作一个具有多人游戏支持的简单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连接-只会端口实际上来自外部的转发连接(互联网)。

08-05 14:47