Dart的套接字与web套接字

套接字

首先在项目中建三个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

这里写图片描述

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值