【问题标题】:java.net.ConnectException: failed to connect to /192.168.253.3 (port 2468): connect failed: ECONNREFUSED (Connection refused)java.net.ConnectException:无法连接到 /192.168.253.3(端口 2468):连接失败:ECONNREFUSED(连接被拒绝)
【发布时间】:2015-03-25 20:46:23
【问题描述】:

我想通过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(连接被拒绝)

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

【问题讨论】:

  • 如果以下答案都不够,请重启手机。它对我有用。

标签: java android networking wifi


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 有没有一种方法可以明确指定应用程序应该使用哪个 IP 地址进行连接。
    • @TarunGupta - 将 IP 地址放入 URL。
    • 那么解决办法是什么?这是评论,不是答案。
    • 解决方法是正确指定服务运行所在的服务器ip或主机名。使用 localhost 将映射到运行您的 android 应用程序的主机(在我的场景中可能是一台虚拟机)。
    【解决方案3】:

    为什么会发生这种情况:

    1. 服务器无法发送响应:确保后端在提到的 IP 和端口上正常工作。
    2. SSL 连接被阻止:通过导入 SSL 证书解决此问题

    不太可能:

    1. Cookie 未发送
    2. 请求超时:更改请求超时

    【讨论】:

    • 场景 3 和 4 极不可能导致“连接被拒绝”。 1是合理的。 2 是合理的......如果您尝试启用 SSL 支持而不配置任何服务器证书,则取决于网络服务器会做什么。
    【解决方案4】:

    我也遇到了同样的问题,我在 Windows 和默认网关中尝试了多个 IP,例如我的公共 IP 和本地主机默认 IP 127.0.0.1,但响应相同。 但我忘记检查了

    C:> ipconfig
    

    ipconfig 清楚地说出我连接的那个适配器的实际 IP 地址是什么,就像我连接了 Wifi 适配器一样,我的 IP 地址将显示为:

    Wireless LAN adapter Wireless Network Connection:
    
       Connection-specific DNS Suffix  . :
       Link-local IPv6 Address . . . . . : fe80::69fa:9475:431e:fad7%11
       IPv4 Address. . . . . . . . . . . : 192.168.15.92
    

    希望对你有帮助。

    【讨论】:

    • 对我来说,机器重启后 IPv4 发生了变化。所以通过 ipconfig 检查它是有效的。
    【解决方案5】:

    我解决了同样的问题,我通过代理服务器使用网络连接,当我选择不使用代理进行内部和本地连接的选项时,问题消失了

    【讨论】:

      【解决方案6】:

      检查您建立连接的文件中的数据库名称。

      【讨论】:

        【解决方案7】:

        关闭公共网络中的 Windows Firewall Defender 后,我的问题已解决,因为我已连接到该网络。

        【讨论】:

          【解决方案8】:

          首先,我使用localhost:port格式,出现了这个错误。然后我把地址改成ip:port格式,问题就解决了。

          【讨论】:

            【解决方案9】:

            您可以将域转换为 IP 地址 因为每个域都有特定的 IP 地址,那么您将解决该问题。 我希望这能帮到您。

            【讨论】:

              猜你喜欢
              • 2016-08-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-04
              • 1970-01-01
              • 2017-10-06
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多