套接字
首先在项目中建三个dart文件,如下图
main.dart中的代码如下
import 'dart:io';
import 'dart:convert';
main(List<String> arguments) {
//绑定地址和端口,获取套接字,监听每个连接
ServerSocket.bind('127.0.0.1', 8089).then((serverSocket) {
print('开始监听');
serverSocket.listen((socket) {
socket.transform(UTF8.decoder).listen(print);
});
});
}
Socket-1.dart中的代码如下
import 'dart:io';
main(List<String> arguments) {
//创建一个Socket连接到指定地址与端口
Socket.connect('127.0.0.1', 8089).then((socket) {
//输出socket运行时的类型
print(socket.runtimeType);
socket.write('Hello, World!');
});
}
Socket-2.dart中的代码如下
import 'dart:io';
main(List<String> arguments) {
//创建一个Socket连接到指定地址与端口
Socket.connect('127.0.0.1', 8089).then((socket) {
//输出socket运行时的类型
print(socket.runtimeType);
socket.write('Hello, Dart!');
});
}
首先,运行main.dart,看看效果
已经开始监听了,再访问本机地址,看看控制台的输出
控制台输出了监听到的访问信息,说明监听是成功的,然后分别运行Socket-1.dart和Socket-2.dart
服务器成功接收到客户机的请求内容
Web套接字
重新编写前面三个文件的代码
main.dart中的代码如下
import 'dart:io';
import 'dart:async';
handleMsg(msg) {
print('收到信息:$msg');
}
main(List<String> arguments) {
runZoned(() {
HttpServer.bind('127.0.0.1', 8089).then((server) {
server.listen((HttpRequest req) {
if (req.uri.path == '/ws') {
//把普通的HTTP请求升级成WebSocket请求
WebSocketTransformer.upgrade(req).then((socket) {
socket.listen(handleMsg);
});
}
});
});
},
onError: (e) => print("出现一个错误!"));
}
Socket-1.dart中的代码如下
import 'dart:io';
main(List<String> arguments) {
//创建一个WebSocket连接,URL必须使用ws或wss
WebSocket.connect('ws://127.0.0.1:8089/ws').then((socket) {
socket.add('你好!');
});
}
Socket-2.dart中的代码如下
import 'dart:io';
main(List<String> arguments) {
//创建一个WebSocket连接,URL必须使用ws或wss
WebSocket.connect('ws://127.0.0.1:8089/ws').then((socket) {
socket.add('你也好呀!');
});
}
首先,运行main.dart,看看效果
虽然没什么输出,但是服务器已经运行起来了,然后分别运行Socket-1.dart和Socket-2.dart
服务器成功接收到客户机的请求内容