android - 尝试将 http get 请求从物理设备发送到 pc 时颤动“连接被拒绝”(errno = 111)
问题描述
我构建了一个颤振应用程序,它与我用烧瓶编写的网络服务器通信。如果我使用虚拟设备,一切都按预期工作,没有任何错误。一旦我在物理设备上以发布模式尝试它,在与服务器通信时就会遇到问题
我在使用物理设备时唯一改变的是 ip。我10.0.2.2
在虚拟设备和我的计算机上使用 ip4 地址 - 我在 Windows 10 中使用 ipconfig 获得 - 在物理设备上
- 两台设备都在同一个网络中,连接到同一个路由器
- 在 AndroidManifest 中为所有模式(Debug、Main、Profile)启用 Internet 权限
- 我什至禁用了防火墙
导致问题的行是
await http.get(url).timeout(Duration(seconds: 15), onTimeout: () {
// Handle timeout
// This entire thing is in a try-catch block in an async function
});
在物理设备上的调试模式下,当发送 HTTP get 请求时 VSCode 立即说
Exception has occurred.
SocketException (SocketException: OS Error: Connection refused, errno = 111, address = 192.168.178.20, port = 43378)
第一个问题:为什么是端口 43378?是 HTTP 请求发送到的端口吗?因为当我运行烧瓶应用程序时,它说:
Running on http://127.0.0.1:5000/
这可能是问题吗?我本来希望异常说端口是 URL 中声明的 5000。或者我是否必须改变我设置烧瓶应用程序的方式?目前它是开发服务器,因为我在付款和部署之前仍在测试
但是我希望我没有忘记任何重要信息。任何关于可能出错或如何在此处调试的建议都非常受欢迎
解决方案
将一个 Uri 对象传递给 http.get 函数。Uri 类允许您将端口指定为文档https://api.dart.dev/stable/2.12.0/dart-core/Uri-class.html
推荐阅读
- asp.net-core - 如何保证操作和日志成功?
- c# - c# asp net updatepanel 导致页面刷新
- xamarin - Xamarin.Forms 设计开始菜单
- sql - 具有深度嵌套数组循环的 SQL 查询 OpenJson
- php - 如何计算在php中具有不同值的文件的匹配数
- typescript - 从联合类型中提取字符串文字值以进行更强的类型检查
- angular - 在 Angular 8 的 Bootstrap 模式对话框中可见组件后如何运行函数?
- java - Hyperledger Fabric - 无法解析主机 - 将资产发布到链码时
- reactjs - 如何在 gh-pages(github 页面)上部署我的 React 应用程序?
- wpf - WPF/MVVM DataGrid - 即使 GridLinesVisibility 为 False,也显示一条水平网格线