/// <summary> /// 包装 UTF8编码 /// 将正文包装成ProtocolData再序列化和编码成Byte /// </summary> /// <param name="content"></param> /// <returns></returns> public static byte[] Packing(string content) { return(SerializationHelper.Serialize(new ProtocolData { Content = EncodingHelper.Encoding(content) })); }
/// <summary> /// 启动服务 /// </summary> public void Start() { // 第一步:绑定端口 // 服务端用于监听 Socket socketListen = CreateServerSocket(); // 第二步:开启线程,进行监听 Thread thrAccept = new Thread(Watching); thrAccept.IsBackground = true; thrAccept.Start(socketListen); Console.WriteLine("Server started Listen on " + socketListen.LocalEndPoint.ToString()); // 死循环发送数据到客户端 while (true) { var str = MessageQueue.WaitOne(); // 第五步:发送信息 // TODO 构建请求或响应管道,包含 请求,解密->反序列化->...处理...->序列化->加密,响应 // TODO 一次请求的数据过大,构建流读取?JSON是否支持流读取 // 使用序列化器 转换字节数据和对象 var content = $"{str} - by Server on {DateTime.Now.ToString()}"; var dataBytes = SerializationHelper.Serialize(new ProtocolData { Headers = new List <Attribute> { new Attribute { Name = "ServerTime", Value = DateTime.UtcNow.ToString() } }, Content = EncodingHelper.Encoding(content) }); // TODO 这里是群发,改为通过协议转发 foreach (var comunicate in socketClientConns) { if (comunicate.Value != null && comunicate.Value.Connected) { comunicate.Value.Send(dataBytes); } } } }
/// <summary> /// 序列化&编码&加密 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static byte[] Serialize(object obj) { return(EncodingHelper.Encoding(JsonConvert.SerializeObject(obj))); }