java.net.ConnectException:无法连接到 /192.168.253.3(端口 2468):连接失败:ECONNREFUSED(连接被拒绝)

新手上路,请多包涵

我想通过 WiFi 在 PC 和手机之间传输一些数据。

这就是我获取 WiFi IP 地址的方式:

 String ip  = String.format(
                    "%d.%d.%d.%d",
                    (wifiInfo.getIpAddress() & 0xff),
                    (wifiInfo.getIpAddress() >> 8 & 0xff),
                    (wifiInfo.getIpAddress() >> 16 & 0xff),
                    (wifiInfo.getIpAddress() >> 24 & 0xff));

new Recive().execute(ip);

这是向 PC 发送消息的代码:

 Socket socket = null;
String message = "test\r\n";
protected Void doInBackground(String... urls) {
    try {
        Log.i("ip", urls[0]);
        socket = new Socket(urls[0], 2468);
        toserver = new DataOutputStream(socket.getOutputStream());
        toserver.writeBytes(message);

        toserver.flush();
        toserver.close();
        socket.close();
        return null;
    } catch (Exception e) {
        Log.i("e", e.toString());
        return null;
    }
}

但是发生错误,

java.net.ConnectException:无法连接到 /192.168.253.3(端口 2468):连接失败:ECONNREFUSED(连接被拒绝)

此外,我使用安卓手机来运行该应用程序。

原文由 Entel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 964
2 个回答

A connect failed: ECONNREFUSED (Connection refused) 很可能意味着该端口和该 IP 地址上没有任何监听。可能的解释包括:

  • 服务已崩溃或尚未(成功!)启动,
  • 您的客户端尝试使用错误的 IP 地址或端口进行连接,
  • 您的客户端正在尝试使用解析为错误 IP 的 DNS 名称进行连接,或者
  • 服务器访问被代表服务器/服务“拒绝”的防火墙阻止。鉴于正常做法(这些天)是防火墙“黑洞”所有不需要的连接尝试,这 _不太可能_。

请注意,虽然您有一个名为 urls 的数组变量,但它不能包含真实的 URL。 Socket 构造函数没有重载,它采用任何形式的真实 URL。事实上,如果您提供了一个字符串形式的 URL,如下所示:

  new Socket("http://example.com", 42)

结果将是一个不同的例外。同样,如果您尝试连接到您无法路由到的网络上的 IP 地址(例如“不同的 WiFi 网络”),那么您将得到一个不同的异常;例如“找不到主机”、“没有到主机的路由”或“没有到网络的路由”。

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

在开发机器上的虚拟设备上运行的 android 应用程序开发过程中的一个常见错误是忘记虚拟设备与您的开发机器不是同一主机。因此,如果您的服务器在您的开发机器上运行,您不能使用“ http://localhost/ …”网址,因为它会在虚拟设备而不是您的开发机器上查找服务器端点。

原文由 Farrukh Najmi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题