我建立了一个flutter应用程序,它与我用flask编写的web服务器通信。如果我使用虚拟设备,一切都可以正常工作,没有任何错误。当我在物理设备上以发布模式尝试它时,当涉及到与服务器的通信时,我就会遇到问题
我在使用物理设备时唯一改变的是ip。我在虚拟设备上使用10.0.2.2
,在物理设备上使用计算机的ip4地址(我在windows 10中使用ipconfig获得)
- 两个设备在同一个网络中连接到同一个路由器
- Internet Permission在AndroidManifest中为所有模式(Debug, Main, Profile)启用
- 我甚至关闭了防火墙
引起问题的行是
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请求发送到的端口吗?因为当我运行flask应用时它说:
Running on http://127.0.0.1:5000/
可能是这个问题吗?我本以为异常会说端口是URL中声明的5000。或者我需要改变我设置flask应用的方式吗?目前它是开发服务器,因为在我付费和部署之前我仍在测试
但是我希望我没有忘记任何重要的信息。任何关于什么可能是错的或如何调试这里的建议是非常赞赏的
将Uri对象传递给http。得到函数。Uri类允许您指定端口为Documentation https://api.dart.dev/stable/2.12.0/dart-core/Uri-class.html