flutter——No route to host错误

解决flutter——no route host

问题描述No route to host

I/flutter ( 9316): error:::DioError [DioErrorType.DEFAULT]: SocketException: OS Error: No route to host, errno = 113, address = 192.168.XX.XX, port = 48594
在这里插入图片描述

解决方法

**这种情况有大部分可能是IP变了,只需要把IP修改下就好了。**至于其他情况暂未遇到,遇到后再来解决吧。
困扰了大半天,继续在flutter的路上踩坑。

### 关于Flutter WebSocket连接异常的问题 在开发过程中遇到 `WebSocketChannelException` 和 `SocketException` 错误提示 `No route to host` 的情况,通常是由以下几个原因引起的: #### 1. **网络配置问题** 如果设备无法访问目标地址,则可能是由于未正确设置应用的网络权限。对于安卓平台,需要确保在 `AndroidManifest.xml` 中添加了必要的网络权限声明[^5]。 ```xml <uses-permission android:name="android.permission.INTERNET"/> ``` 此外,某些情况下还需要启用明文流量支持(针对HTTP而非HTTPS)。可以通过修改 `network_security_config.xml` 来实现这一点: ```xml <?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">your-domain.com</domain> </domain-config> </network-security-config> ``` 随后将其引用到 `AndroidManifest.xml` 文件中: ```xml <application ... android:networkSecurityConfig="@xml/network_security_config" ...> </application> ``` #### 2. **防火墙或路由器限制** 当出现 `No route to host` 或者类似的错误时,可能是因为当前环境下的防火墙或者路由策略阻止了特定IP地址的数据包传输。这尤其常见于企业内部网或公共Wi-Fi环境中。可以尝试切换至其他网络来验证是否存在此类限制[^4]。 #### 3. **服务器端问题** 确认服务端是否能够正常接收来自客户端的消息以及其监听状态是否开启。另外还需注意DNS解析失败也可能引发该类错误消息。因此建议直接通过IP地址代替域名建立连接测试一下稳定性如何变化。 #### 4. **iOS特殊处理** 如果是专指iOS平台上发生的此现象,则需额外关注苹果系统的沙盒机制及其对第三方库使用的约束条件。即使已按照官方文档完成相应调整仍有可能碰到兼容性障碍。此时可考虑升级Xcode版本并重新编译整个工程文件;同时也要保证Podfile中的依赖项处于最新稳定版状态。 以下是创建简单WebSockets通信的一个基础例子供参考: ```dart import 'package:flutter/material.dart'; import 'dart:convert'; import 'package:web_socket_channel/io.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { final channel = IOWebSocketChannel.connect('ws://echo.websocket.org'); return MaterialApp( home: Scaffold( appBar: AppBar(title: Text("WebSocket Test")), body: Center(child: MessageForm(channel)), ), ); } } class MessageForm extends StatefulWidget { final IOWebSocketChannel channel; MessageForm(this.channel); @statefulWidgetState createState() => _MessageFormState(); } class _MessageFormState extends State<MessageForm> { TextEditingController controller = TextEditingController(); void sendMessage(String message){ widget.channel.sink.add(message); } @override Widget build(BuildContext context) { return Column( children: [ TextField(controller:controller), ElevatedButton(onPressed: (){sendMessage(controller.text);}, child:Text("Send")) ], ); } @override void dispose(){ super.dispose(); widget.channel.sink.close(); } } ``` 以上代码片段展示了怎样利用 Dart 的 WebSockets 功能构建基本聊天界面原型[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值