且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Dart的套接字与web套接字

更新时间:2022-09-16 21:26:55

套接字

首先在项目中建三个dart文件,如下图

Dart的套接字与web套接字

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,看看效果

Dart的套接字与web套接字

已经开始监听了,再访问本机地址,看看控制台的输出

Dart的套接字与web套接字

控制台输出了监听到的访问信息,说明监听是成功的,然后分别运行Socket-1.dart和Socket-2.dart

Dart的套接字与web套接字

服务器成功接收到客户机的请求内容

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,看看效果

Dart的套接字与web套接字

虽然没什么输出,但是服务器已经运行起来了,然后分别运行Socket-1.dart和Socket-2.dart

Dart的套接字与web套接字

服务器成功接收到客户机的请求内容