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

43

我希望使用WiFi在电脑和手机之间传输一些数据。

以下是获取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)失败:连接被拒绝(Connection refused)

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


1
如果以下答案都不够用,请重新启动手机。这对我有用过。 - Hesham Yassin
9个回答

26

连接失败:ECONNREFUSED(连接被拒绝) 很可能意味着该端口和IP地址上没有任何正在监听的内容。可能的解释包括:

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

还有可能是您在不应该使用本地代理服务器时使用了它...反之亦然。如果您使用的是受限制或受监控的企业网络,则可能会发生这种情况。请与您的本地网络团队联系和/或检查您的代理设置是否正确。


请注意,虽然您有一个名为urls的数组变量,但它不能包含真实的URL。在任何形式下,都没有重载Socket构造函数可以接受真实的URL。事实上,如果您提供了一个字符串形式的URL,如下所示:
 new Socket("http://example.com", 42)

结果会是一个不同的异常。同样地,如果你尝试连接到一个你无法路由到的网络上的 IP 地址(例如“另一个 WiFi 网络”),则会得到不同的异常;例如“找不到主机”,“无法路由到主机”或“无法路由到网络”。


14

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


有没有一种方法可以明确指定应用程序连接时使用的IP地址? - Tarun Gupta
2
@TarunGupta - 将IP地址放入URL中。 - Stephen C
1
那么解决方案是什么?这只是一个评论,不是答案。 - Treewallie
1
解决方案是正确指定运行服务的服务器IP或主机名。使用localhost将映射到运行Android应用程序的主机(在我的情况下可能是虚拟机)。 - Farrukh Najmi

8

为什么会出现这种情况:

  1. 服务器无法发送响应: 确保IP地址和端口处的后端程序运行正常。
  2. SSL连接被阻止: 通过导入SSL证书来解决此问题。

可能性较小的原因:

  1. Cookies未被发送
  2. 请求超时: 修改请求超时时间

1
极不可能出现3和4情况下的“连接被拒绝”。1是有可能的。2也是有可能的,这取决于Web服务器在尝试启用SSL支持但没有配置任何服务器证书时会发生什么。 - Stephen C

2
我也遇到了同样的问题,我尝试使用多个IP地址,例如我的公共IP地址、本地主机默认IP地址127.0.0.1以及Windows默认网关,但是得到了相同的响应。但是我忘记检查。

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进行检查是有效的。 - akash89

1
我已经解决了这个错误,看起来你不能使用localhost或127.0.0.1,你必须使用你的IPv4地址,在命令提示符中键入ipconfig,复制IPv4地址并将其粘贴到你的代码中,而不是使用本地主机。

0

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


0

首先,我使用了 localhost:port 的格式,出现了这个错误。然后我将地址更改为 ip:port 的格式,问题得到解决。


0

我的问题在关闭公共网络的Windows防火墙后得到了解决,因为我连接了该网络。


-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接