Flutter网络通信插件socket_com的使用
Flutter网络通信插件socket_com的使用
在本教程中,我们将介绍如何使用 socket_com
插件来实现 Flutter 应用中的网络通信。我们将分别从服务器端和客户端的角度进行讲解,并提供完整的示例代码。
服务器端
启动服务器监听端口 3000
首先,我们需要启动一个服务器并监听指定的端口(例如 3000)。以下代码展示了如何创建一个服务器并处理客户端连接。
import 'dart:io';
import 'package:socket_com/socket_com.dart';
void main() async {
// 创建一个服务器并绑定到 IP 和端口 3000
final server = await ServerSocket.connect(ip: InternetAddress.anyIPv4, port: 3000);
// 当有客户端连接时,调用 handleClient 方法
server.onConnection((Socket client) {
handleClient(client);
/// 您可以使用 Socket 的方法(如 on)监听特定客户端的事件
});
print("服务器已启动,正在监听端口 3000...");
}
// 处理客户端连接逻辑
void handleClient(Socket client) {
client.listen((data) {
// 接收数据并打印
print("来自客户端的数据: ${String.fromCharCodes(data)}");
// 向客户端发送响应
client.write("服务器已收到您的消息!");
}, onError: (error) {
print("发生错误: $error");
}, onDone: () {
print("客户端断开连接");
});
}
客户端
接下来,我们将在客户端连接到上述服务器,并发送和接收数据。
连接到服务器(本地主机,端口 3000)
客户端需要连接到运行在本地主机上的服务器(端口 3000)。以下是连接代码:
import 'dart:io';
import 'package:socket_com/socket_com.dart';
void main() async {
// 连接到服务器
final Socket client = await ClientSocket.connect(host: "0.0.0.0", port: 3000);
handleServerConnection(client);
}
// 处理与服务器的连接逻辑
void handleServerConnection(Socket client) {
// 添加事件监听器,当接收到消息时触发回调
final registered = client.on('message', (data) {
print("从服务器接收到的消息: $data");
});
// 监听服务器发送的任何数据
client.listen((data) {
print("从服务器接收到的其他数据: ${String.fromCharCodes(data)}");
});
// 发送数据给服务器
client.send('message', {"username": "Client", "message": "Hello Server!"});
}
示例代码说明
1. 数据传输类 (DTO
)
为了方便数据传输,我们可以定义一个类并扩展自 DTO
。以下是一个示例:
import 'dart:convert';
class Message extends DTO {
String username;
String message;
Message({required this.username, required this.message});
factory Message.fromJson(Map<String, dynamic> json) {
return Message(username: json['username'], message: json['message']);
}
@override
Map<String, dynamic> toJson() {
return {"username": username, "message": message};
}
// 自定义编码方式
@override
String encode() {
return json.encode(toJson());
}
}
2. 使用 Message
类发送数据
我们可以通过 send
方法将 Message
对象发送给服务器:
client.send(
'message',
Message(
username: "Client",
message: "Hi, I am the client!",
),
);
完整示例代码
您可以参考以下完整示例代码,它结合了服务器端和客户端的功能:
服务器端代码 (server.dart
)
import 'dart:io';
import 'package:socket_com/socket_com.dart';
void main() async {
final server = await ServerSocket.connect(ip: InternetAddress.anyIPv4, port: 3000);
server.onConnection((Socket client) {
handleClient(client);
});
print("服务器已启动,正在监听端口 3000...");
}
void handleClient(Socket client) {
client.listen((data) {
print("来自客户端的数据: ${String.fromCharCodes(data)}");
client.write("服务器已收到您的消息!");
}, onError: (error) {
print("发生错误: $error");
}, onDone: () {
print("客户端断开连接");
});
}
客户端代码 (client.dart
)
import 'dart:io';
import 'package:socket_com/socket_com.dart';
void main() async {
final Socket client = await ClientSocket.connect(host: "0.0.0.0", port: 3000);
handleServerConnection(client);
}
void handleServerConnection(Socket client) {
final registered = client.on('message', (data) {
print("从服务器接收到的消息: $data");
});
client.listen((data) {
print("从服务器接收到的其他数据: ${String.fromCharCodes(data)}");
});
client.send('message', {"username": "Client", "message": "Hello Server!"});
}
更多关于Flutter网络通信插件socket_com的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复