2

正如标题所说,我的服务器在本地机器上运行,我对其进行了测试和调试,它运行良好(服务器也是用 java 编写的)。但是当我尝试用我的远程 IP(而不是 192.168.0.113 我使用 146.255.xx)测试它时,服务器没有收到任何东西,而客户端抛出了这个:

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 上的防火墙,并且我确实转发了路由器上的端口。我尝试了一些端口扫描器,它们都检测到我的端口上的服务,但我的客户端一次又一次地无法访问它。


解决了! 看来我的路由器启用了客户端隔离,这意味着设备无法在同一网络上相互连接。我尝试从远程客户端连接并且它有效。

4

2 回答 2

4

ECONNREFUSED 表示已尝试连接并且远程主机回复说没有人在该端口上侦听。这可能意味着几件事:

  1. 这真的是你的IP吗?ifconfig/ipconfig 说什么(提示:不一定 whatismyip.com 会说)?
  2. Java 服务器是否侦听所有接口?相同的端口可以在 localhost 上打开并在其他接口上关闭。检查服务器上的绑定地址。
  3. 尝试 telnet + tcpdump,它是否显示数据包到达正确的地址?

而这些仅仅是开始。

于 2013-09-04T16:37:13.783 回答
0

我在让我的 Android Studio java TCP 客户端连接到我的开发机器上的本地服务器时也遇到了问题。我通过修复两件事让它工作:

  1. 不要尝试向“127.0.0.1”或“localhost”打开套接字。而是找出您的本地地址。就我而言,它与“192.168.0.100”一起使用,这是我的开发计算机本地地址。

  2. 不要尝试在 android java 应用程序的主线程中创建“new Socket(address,portnumber)”。我通过在另一个线程中创建套接字来使其工作。这是一个临时线程,它只创建了 Socket 并在死前存储了引用。

问题 2 的例外情况

在主线程中创建套接字时:

11-29 11:00:35.718 27063-27063/se.mycompany.tcpclient2 E/AndroidRuntime:
致命例外:主要
进程:se.mycompany.tcpclient2,PID:27063
java.lang.IllegalStateException:无法执行 android:onClick 的方法
在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
...
于 2015-11-29T10:16:35.477 回答