我正在尝试从运行在 http://localhost:5050 上的 Web 服务器获取数据并打印它。起初它给了我一个 Socket Exception,所以我查了一下,看起来你应该用你计算机的 IP 地址替换“localhost”,所以我这样做了,现在当我获取它时,它似乎只是。 .. 卡住?我在请求后有一个打印语句,但它不打印任何内容,没有错误,没有输出......什么都没有。我正在使用物理设备,这是我的代码:
class AllFlights extends StatefulWidget {
const AllFlights({Key? key}) : super(key: key);
@override
_AllFlightsState createState() => _AllFlightsState();
}
class _AllFlightsState extends State<AllFlights> {
Future<void> getAllFlights() async {
try {
log("here");
final res = await http.get(Uri.parse("http://192.168.8.100:5050/iflive/atc")); //fetch data -- gets stuck here
log(res.body); // "log" statement, imported from dart:developer
} catch (e) {
log(e.toString());
}
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: ElevatedButton(child: Text("All Flights",), onPressed: getAllFlights,),
),
);
}
}
注意:如果重要的话,Web 服务器在 Docker 容器中运行,端口 5050 映射到主机上的端口 5050。
编辑:我刚刚注意到在调用 api 后 2-3 分钟,它给了我一个套接字异常:[log] SocketException: OS Error: Connection timed out, errno = 110, address = 10.0.2.2, port = 44046
这正常吗?
答案 0 :(得分:0)
更新:我可以通过使用 adb (Android Debug Bridge) 解决这个问题。
adb reverse tcp:5050 tcp:5050
此命令将您手机在 5050 端口上的请求路由到您计算机的 5050 端口。现在您可以直接向 localhost 发出请求,而不是在您计算机的 IP 上。第一个端口参数是您手机的端口,第二个是您计算机的端口。
示例:adb reverse tcp:5000 tcp:5050
会将手机上的端口 5000 映射到计算机上的 5050。
祝大家有个美好的一天!