Flutter 使用WebSockets
封面图
•
2025-10-06
•
Flutter
9
0
0
0
在 Flutter 中使用 **WebSockets** 可以通过 `dart:io` 包中的 `WebSocket` 类来实现。虽然 `dart:io` 主要用于服务端或命令行应用,但在 Flutter 中也可以使用它来连接 WebSocket 服务器。 不过,需要注意的是:**Flutter 的 `dart:io` 在移动端(iOS/Android)上可能受到限制**,尤其是在 Android 上,某些网络功能可能需要额外配置(如开启 `android:usesCleartextTraffic="true"`)。如果你的项目是 Web 或桌面应用,那么 `dart:io` 是可行的;如果是移动端,建议使用 `web_socket_channel` 这个第三方库,它兼容性更好。 --- ## ✅ 推荐方式:使用 `web_socket_channel` 库 ### 1. 添加依赖 在 `pubspec.yaml` 中添加: ```yaml dependencies: web_socket_channel: ^2.1.0 ``` 然后运行 `flutter pub get` --- ### 2. 使用示例代码 ```dart import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:web_socket_channel/status_codes.dart' as status; void main() { final channel = WebSocketChannel.connect(Uri.parse('ws://your.websocket.url')); // 监听消息 channel.stream.listen((message) { print('收到消息: $message'); }, onError: (error) { print('错误: $error'); }, onDone: () { print('连接关闭'); }); // 发送消息 channel.sink.add('Hello, WebSocket!'); // 关闭连接 // channel.sink.close(status.normal); } ``` --- ## 🧩 注意事项 - 如果你使用的是 **HTTPS + WSS**(即加密的 WebSocket),请确保 URL 是 `wss://`。 - 如果你需要处理二进制数据,可以使用 `channel.sink.addBinary(data)`。 - 如果你想监听连接状态变化,可以使用 `channel.stream` 或 `channel.value` 来获取当前连接状态。 --- ## ⚠️ 如果你坚持用 `dart:io`(不推荐移动端) ### 示例代码: ```dart import 'dart:io'; void main() async { final socket = await WebSocket.connect('ws://your.websocket.url'); socket.listen( (message) { print('收到消息: $message'); }, onError: (error) { print('错误: $error'); }, onDone: () { print('连接关闭'); }, ); socket.add('Hello, WebSocket!'); // 等待一段时间后关闭 await Future.delayed(Duration(seconds: 5)); socket.close(); } ``` > ⚠️ 注意:在 Flutter 的移动平台上(iOS/Android),使用 `dart:io` 可能会遇到网络权限问题,或者被系统限制。因此,建议优先使用 `web_socket_channel`。 --- ## 📌 总结 | 方法 | 是否推荐 | 说明 | |------|----------|------| | `dart:io` | 不推荐(移动端) | 功能强大但兼容性差 | | `web_socket_channel` | 推荐 | 跨平台、易用、适合 Flutter | --- 如果你有具体需求(比如发送 JSON、处理二进制、自动重连等),我可以进一步提供更详细的代码示例。欢迎继续提问!
上一篇:
家中路由器放哪里信号最好?
下一篇:
Flutter异常捕获
标题录入,一次不能超过6条
返回顶部
留言
留言
评论