【发布时间】:2015-05-10 10:33:37
【问题描述】:
我正在尝试制作一个支持多人的简单乒乓球游戏,但是当我尝试使用我的外部 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)
【问题讨论】:
-
你能ping到这个服务器吗?
-
@mr.icetea 是的,我可以
-
您的网络拓扑是什么样的(您的客户端和服务器之间是否有任何路由器、NAT 网关等 - 听起来您的服务器位于 NAT 网关后面,而您尚未配置网关正确地将 TCP 端口转发到您的服务器)?或者,你的IP地址是什么,你的服务器的IP地址是什么,你的客户端使用哪个IP地址联系服务器?
-
@DavisEllwood 你是在说你 1. 启动服务器 2. 在与服务器相同的机器上启动客户端,但指示客户端连接到您的外部互联网可路由 IP 地址而不是 127.0。 0.1 ?如果是这样,我假设您在家庭网络上,可能使用 DSL,并带有一个对您的本地网络进行 NAT 以访问互联网的盒子。如果是这样,您的设置通常不起作用,因为大多数消费者 NAT 网关不处理尝试连接到外部 IP 的内部设备,该外部 IP 是端口转发回内部网络。
-
@DavisEllwood 不,一点也不。 Ping 与 NAT'ig TCP 连接完全不同。平应该工作。通过外部 IP 地址对内部 TCP 连接进行 NAT 通常不起作用。这是特定于供应商的,您可以通过适当的配置使其与某些设备和大多数高端设备(例如 cisco/juniper)一起使用,但不是您的 ISP 提供的常见廉价家用路由器/调制解调器