I/flutter(30720):SocketException:操作系统错误:连接超时,errno = 110,地址= 192.19.170.13,端口= 47763

问题描述 投票:0回答:12

我使用的是真实设备(不是 Android 模拟器) 后端:MongoDb Atlas, API:strapi-beta,收到此错误:

I/flutter(30720):SocketException:操作系统错误:连接超时,errno = 110,地址= 192.19.170.13,端口= 47763

(我发现了很多类似的问题,但都没有使用真机进行测试)

void _registerUser() async {
    try {
      var ip = '192.19.170.13';
      setState(() => _isSubmitting = true);
      http.Response response =
          await http.post('http://$ip:1337/auth/local/register',
 /* I've also tried using localhost(it didn't work) everyone suggested to use my loopback adapter's (Ethernet's ip address) even that isn't working.*/
 body: {
        'username': _username,
        'email': _email,
        'password': _password,
      });

      final responseData = json.decode(response.body);
      setState(() => _isSubmitting = false);
      _successSnackBar();
      print(responseData);
    } catch (e) {
      setState(() => _isSubmitting = false);
      print(e.toString());
    }
  }
flutter mongodb dart http socketexception
12个回答
10
投票

检查您的设备网络连接(模拟器或真实设备)和机器网络连接(计算机)是否相同。

  • 移动数据关闭
  • 您机器上使用的用户wifi数据。

问题解决了。


7
投票

好吧,如果您正在使用本地服务器进行测试并且您使用的是 Windows。该错误可能是由于 Windows 防火墙造成的。您可以禁用防火墙,它应该可以工作,或者向防火墙添加规则以允许 tcp 访问提到的端口。


3
投票

如果您使用 Chrome,则需要访问

chrome://inspect/#devices

并将您的端口添加到“端口转发”,如下所示

并确保您的设备上有 USB 调试功能。


1
投票

我的 Android 设备也遇到了同样的问题。即 IP 地址链接在本地主机中工作正常,但在物理设备上不起作用。

所以我发现,要在物理设备(Android 设备)上使用您的 IP 地址链接,您必须需要在 WAN 网络上托管您的网站(主要是 WebAPI)才能访问您的 IP 地址链接。

所以答案是 在 WAN 网络上托管您的网站(主要是 WebAPI)。


1
投票

所以我正在使用移动数据并给出了移动数据网络的IP,当我切换回我的wifi时我收到了这个错误对我有用的是我去cmd输入ipconfig并复制我的ip4地址并将其替换为api url在节目中


1
投票

这也可能是您的本地主机 Web 配置的问题。在 .Net 6 中,我遇到了同样的问题,如果使用 DEVELOPMENT environment,我需要指定应该限制 Web 的 URL。

Program.cs 添加以下内容:

if (app.Environment.IsDevelopment())
{
    app.Urls.Add("https://*:7176"); //after colon enter port that your web uses
}

然后在您的 Flutter 项目中,您必须创建该类:

class MyHttpOverrides extends HttpOverrides{
  @override
  HttpClient createHttpClient(SecurityContext? context){
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
  }
}

毕竟,在 main() 中,在调用 runApp() 方法之前,用您创建的类覆盖 HttpOverrides.global

HttpOverrides.global = MyHttpOverrides();

0
投票

我的模拟器也有同样的问题,问题的原因是 IP。

您能否在不使用 flutter 应用程序的情况下检查设备中是否可以连接到该 IP?

我的问题是尝试使用 127.0.0.1 连接到主机 localhost,并发现此页面: https://developer.android.com/studio/run/emulator-networking


0
投票

方法一:

  1. 安装apache2
  2. 安装curl
  3. 访问www并固定www.IP地址

方法二:

  1. 将您的路由器 NAT 设置配置为您的本地 IP 地址。
    现在您可以使用您的互联网 IP 地址。

0
投票

我也多次遇到这个问题。我所做的是使用我的 Android 手机上的热点来调试连接到电脑,瞧,它可以工作了。


0
投票

好吧,我解决这个错误的方法是关闭Windows防火墙,然后我在路由器中打开所需的端口,它起作用了!您还可以在Windows防火墙中设置入站规则,这样您就不需要将其关闭


0
投票

我在本地托管 Flask 服务器和 Mongo 数据库时遇到了这个问题,方法是将数据库移动到单独的设备并在那里托管。

还应该预料到,如果两者托管在同一 IP 上,您将遇到相同的问题。


0
投票

将电脑上的连接设置为私有而不是公开,然后重新启动服务器,然后通过 cmd 中的 ipconfig 命令选择你的电脑 IP 并将其用作基本 url

© www.soinside.com 2019 - 2024. All rights reserved.