Flutter 使用Socket API
封面图
•
2025-11-24
•
Flutter
2
0
0
0
在 Flutter 中使用 **Socket API** 可以通过 `dart:io` 库中的 `Socket` 类来实现。它主要用于建立 TCP 或 UDP 连接,适用于需要与服务器进行实时通信的场景(如聊天应用、实时数据更新等)。 --- ## ✅ 一、基本概念 - **TCP Socket**:面向连接的协议,适合可靠的数据传输。 - **UDP Socket**:无连接的协议,适合对延迟敏感但允许少量丢包的场景。 --- ## ✅ 二、Flutter 中使用 TCP Socket 示例 ### 1. 添加依赖(不需要额外依赖) `dart:io` 是 Dart 内置库,无需额外添加依赖。 --- ### 2. 客户端代码示例(连接到服务器) ```dart import 'dart:io'; import 'dart:convert'; void main() async { // 连接到服务器(假设服务器地址为 192.168.1.100,端口为 8080) final socket = await Socket.connect('192.168.1.100', 8080); print("Connected to server"); // 发送数据 socket.write("Hello from Flutter!"); // 接收响应 socket.listen( (data) { String response = utf8.decode(data); print("Received: $response"); }, onDone: () { print("Connection closed"); socket.destroy(); }, onError: (error) { print("Error: $error"); socket.destroy(); } ); } ``` --- ### 3. 服务端代码示例(使用 `dart:io`) ```dart import 'dart:io'; import 'dart:convert'; void main() { // 创建 TCP 服务器,监听 8080 端口 final server = ServerSocket.bind(InternetAddress.anyIPv4, 8080); print("Server is running on port 8080..."); server.listen((Socket client) { print("Client connected"); client.listen( (data) { String message = utf8.decode(data); print("Received: $message"); // 回复客户端 client.write("Server received: $message"); }, onDone: () { print("Client disconnected"); client.destroy(); }, onError: (error) { print("Client error: $error"); client.destroy(); } ); }); } ``` --- ## ✅ 三、使用 UDP Socket 示例 ```dart import 'dart:io'; import 'dart:convert'; void main() async { // 创建 UDP socket final socket = await RawDatagramSocket.bind(InternetAddress.anyIPv4, 0); // 发送数据 final data = utf8.encode("Hello from Flutter!"); final address = InternetAddress("192.168.1.100"); socket.send(data, address, 8080); // 接收数据 socket.listen((RawSocketEvent event) { if (event == RawSocketEvent.data) { final buffer = socket.receive(); if (buffer != null) { String message = utf8.decode(buffer.data); print("Received UDP: $message"); } } }); } ``` --- ## ✅ 四、注意事项 | 项目 | 说明 | |------|------| | **平台支持** | `dart:io` 在 Flutter 的 Android/iOS 上可用,但在 Web 平台上不可用(因为浏览器不支持原生 socket)。 | | **安全性** | 使用 `Socket` 需要网络权限(Android 需要 `INTERNET` 权限)。 | | **错误处理** | 始终处理 `onError` 和 `onDone`,避免程序崩溃。 | --- ## ✅ 五、推荐插件(如果需要更高级功能) 如果你需要更方便地管理 socket 连接,可以考虑以下插件: - [**socket_io_client**](https://pub.dev/packages/socket_io_client):基于 WebSocket 的封装,适合实时通信。 - [**flutter_socket_io**](https://pub.dev/packages/flutter_socket_io):封装了 socket.io 协议。 --- ## ✅ 六、总结 | 功能 | 实现方式 | |------|----------| | TCP Socket | `Socket.connect()` / `ServerSocket.bind()` | | UDP Socket | `RawDatagramSocket.bind()` / `send()` | | 数据发送 | `socket.write()` / `socket.send()` | | 数据接收 | `socket.listen()` / `socket.receive()` | --- 如果你有具体的应用场景(比如聊天、实时数据推送等),我可以帮你进一步优化代码或提供更详细的指导!
上一篇:
iOS开发操作(action)和输出口(Outlet)
下一篇:
iOS开发 UI元素
标题录入,一次不能超过6条
留言
评论