连接在远程IP上被拒绝,但在本地IP上被接受

时间:2013-09-04 16:28:12

标签: java android

正如标题所说,我让我的服务器在本地机器上运行,我测试并调试它并且它工作得很好(服务器也用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上禁用了防火墙,我在路由器上转发了端口。我尝试了一些portscanners,他们都检测到我的端口上的服务,但我的客户端无法一次又一次地访问它。


解决! 我对网络的关注不多,但如果服务器和客户端都在同一台路由器上,似乎无法像这样连接。我尝试从远程客户端连接并且它有效。

2 个答案:

答案 0 :(得分:4)

ECONNREFUSED表示尝试连接,远程主机回答没人在监听该端口。这可能意味着几件事:

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

答案 1 :(得分:0)

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

  1. 请勿尝试向&#34; 127.0.0.1&#34;打开套接字。或朝向&#34; localhost&#34;。而是找出你的本地地址。就我而言,它适用于&#34; 192.168.0.100&#34;这是我的开发计算机本地地址。

  2. 不要尝试创建&#34;新套接字(地址,端口号)&#34;在android java app的主线程中。我通过在另一个线程中创建套接字来实现它。这是一个临时线程,它只创建了Socket并在死亡之前存储了引用。

  3. 问题2的例外

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

    11-29 11:00:35.718 27063-27063/se.mycompany.tcpclient2 E/AndroidRuntime: 
    FATAL EXCEPTION: main
    Process: se.mycompany.tcpclient2, PID: 27063
    java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
    ...
    
相关问题