【问题标题】:Java Sockets not working on Android (ECONNREFUSED)Java 套接字在 Android 上不起作用(ECONNREFUSED)
【发布时间】:2018-12-17 17:57:41
【问题描述】:

尝试使用 Android 客户端连接到套接字时,我收到 ECONNREFUSED ConnectException。

当我在我的 PC 上运行代码时,它运行良好,我能够毫无问题地连接到远程服务器(树莓派、haskell)(因此我们可以排除这种可能性)。

ConnectionManager.class 中的相关代码(在 s=connect 行中抛出错误):

    @Override
    protected void onHandleIntent(Intent intent) {
    try {
        s=connect();
        socket_out = new PrintWriter(s.getOutputStream(), true);
        socket_in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

连接函数(“返回新套接字”行中抛出的错误)

    private Socket connect() {
    try {
        return new Socket("Thereisarealip in here",Realport);
    } catch (IOException ex) {
        Logger.getLogger(ConnectionManager.class.getName()).log(Level.SEVERE, null, ex);
    }
    throw new RuntimeException();
}

XML 权限包括以下内容

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<service android:name=".ConnectionManager"></service>

ConnectionManager Java 类是从主线程调用的:

    Intent intent = new Intent(this, ConnectionManager.class);
    startService(intent);

【问题讨论】:

  • 您的手机/应用程序是否在您的 pi 和 pc 所在的局域网(通过无线)上 - 还是 PI 在您的局域网之外?
  • 你用的是模拟器还是真机?
  • @Andy PI 在一个完全不同的网络上。它具有静态 IP 并具有工作端口转发。我可以使用运行相同代码的 PC 连接到它,也可以使用手机上的 SSH 连接到它。
  • @KhalidTaha 我通过 android studio 运行它,但在我的真实手机上通过 USB 运行

标签: java android sockets


【解决方案1】:

发现问题。路由器不允许wifi网络中的任何移动设备访问静态IP地址,而是将它们重定向到自定义页面而不会抛出错误。

【讨论】:

  • 唯一的解决方案就是将网络中使用的静态 IP 地址添加到本地 DHCP 服务器的租用列表中。在路由器中,这通常在“DHCP 静态 IP 租用”菜单中完成,要求添加机器 MAC 地址及其静态 IP 地址。
【解决方案2】:

ECONNREFUSED 仅在服务器未侦听指定端口或无法处理请求时抛出。确保您的服务器能够连续接收连接。为此,在一个线程上侦听传入连接并在另一个线程上处理它们,而不会阻塞侦听过程。正如我所见,清单中已经声明了 INTERNET 权限,所以问题只能出在服务器端。

【讨论】:

  • 这很奇怪,因为相同的代码、相同的 IP、相同的端口、相同的东西每次在我的 PC 上运行时都能完美运行,那么这怎么可能是服务器错误呢?跨度>
  • 是否存在从 Android 设备到包含位于您的 Android 设备和 Pi 之间的路由器的网络(您使用的是 Wifi 还是蜂窝网络?)的可行网络路由?您尝试连接的 Android 设备ping the IP 可以吗?仅仅因为 PC 具有到 IP 的路由并不能保证 Android 设备具有到相同 IP 的路由。
  • @RemyLebeau 仅限 Wifi。使用的路由器与我的PC使用的路由器相同。也会尝试从我的 android 设备上 ping 它
猜你喜欢
  • 2015-08-12
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2013-09-29
  • 1970-01-01
相关资源
最近更新 更多