import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'little_extension.dart'; import 'code.dart'; class SocketUtils extends Socket{ // 私有构造函数 SocketUtils._(); // 私有静态变量,保存类的唯一实例 static SocketUtils? _instance; // 公开的静态方法,返回类的唯一实例 static SocketUtils getInstance() { _instance ??= SocketUtils._(); return _instance!; } } class Socket { static String url = '127.0.0.1'; static int port = 12345; RawDatagramSocket? socket; connect() async { socket = await RawDatagramSocket.bind('127.0.0.2', 1); print('UDP Socket bound to ${socket?.address.address}:${socket?.port}'); // 监听来自网络的数据包 socket?.listen((RawSocketEvent e) { Datagram? d = socket?.receive(); if (d == null) return; // String message = String.fromCharCodes(d.data).trim(); // print('Datagram from ${d.address.address}:${d.port}: $message'); }); heartbeat(); } /// 发送消息 sendMessage(Map data){ socket?.send(dataMake(data), InternetAddress(url), port); } /// 心跳 heartbeat(){ Timer timer = Timer(const Duration(seconds: 10), () { Map data = { "op": 1, "IC": 0 }; socket?.send(dataMake(data), InternetAddress(url), port); heartbeat(); }); } /// 发送数据的处理 List dataMake(Map map){ // 将Map对象转换为JSON字符串 String json = jsonEncode(map); // 加密 String ps = makecode(json, skey); // 转成无符号整数数组 Uint8List uinData = Uint8List.fromList(ps.codeUnits); // 在前面添加 4位 表示长度的小端序 uinData = uinData.toLittle(value: uinData.length); return uinData.toList(); } }