正如标题所说,我的服务器在本地计算机上运行,我对其进行了测试和调试,它运行得很好(服务器也是用java编写的)。但是当我尝试用我的远程IP(而不是192.168.0.113,我使用146.255.x.x)测试它时,服务器没有收到任何东西,而客户端抛出了这个:
09-04 18:23:27.595: W/System.err(24241): java.net.ConnectException: failed to connect to /146.255.x.x (port 4040): connect failed: ECONNREFUSED (Connection refused)
09-04 18:23:27.595: W/System.err(24241): at libcore.io.IoBridge.connect(IoBridge.java:114)
09-04 18:23:27.595: W/System.err(24241): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
09-04 18:23:27.595: W/System.err(24241): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
09-04 18:23:27.595: W/System.err(24241): at java.net.Socket.startupSocket(Socket.java:566)
09-04 18:23:27.595: W/System.err(24241): at java.net.Socket.tryAllAddresses(Socket.java:127)
09-04 18:23:27.595: W/System.err(24241): at java.net.Socket.<init>(Socket.java:177)
09-04 18:23:27.595: W/System.err(24241): at java.net.Socket.<init>(Socket.java:149)
09-04 18:23:27.595: W/System.err(24241): at com.statenislandchat.Main$2$1$1.run(Main.java:146)
09-04 18:23:27.595: W/System.err(24241): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
09-04 18:23:27.595: W/System.err(24241): at libcore.io.Posix.connect(Native Method)
09-04 18:23:27.600: W/System.err(24241): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
09-04 18:23:27.600: W/System.err(24241): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
09-04 18:23:27.600: W/System.err(24241): at libcore.io.IoBridge.connect(IoBridge.java:112)
09-04 18:23:27.600: W/System.err(24241): ... 7 more
我很久以前就禁用了服务器 PC 上的防火墙,并且我确实转发了路由器上的端口。我尝试使用一些端口扫描仪,它们都检测到我的端口上的服务,但我的客户端一次又一次无法访问它。
已解决! 我的路由器似乎启用了客户端隔离,这意味着设备无法在同一网络上相互连接。我尝试从远程客户端进行连接,结果成功了。
最佳答案
ECONNREFUSED 表示已尝试连接,并且远程主机回复说没有人在监听该端口。这可能意味着几件事:
- 这真的是您的 IP 吗? ifconfig/ipconfig 说什么(提示:不一定是whatismyip.com 会说什么)?
- Java 服务器是否监听所有接口(interface)?同一端口可以在本地主机上打开并在其他接口(interface)上关闭。检查服务器上的绑定(bind)地址。
- 尝试 telnet + tcpdump,是否显示数据包发送到正确的地址?
这只是开始。
关于java - 连接在远程 IP 上被拒绝,但在本地 IP 上被接受,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18619195/