static void Main(string[] args) { { try { _server = new ServerModel(); _serverThread = new Thread(_server.Listen); _serverThread.Start(); _listener = new ListenerModel("127.0.0.1", 8888, _server.Context); _listener.Connect(); var command = new SendValidatorKeyCommand(); _listener.SendCommand(command); } catch (Exception ex) { _server.Disconnect(); Console.WriteLine(ex.Message); } } }
private void Back(IAsyncResult ar) { TcpListener lisn = (TcpListener)ar.AsyncState; if (!lisn.Server.IsBound) { return; } TcpClient ct; try { ct = lisn.EndAcceptTcpClient(ar); } catch { OnLog("服务器异常退出"); return; } var stream = ct.GetStream(); var buffer = new byte[BufferSize]; ListenerModel model = new ListenerModel(ct, stream); try { stream.BeginRead(buffer, 0, BufferSize, arstream => { var md = (ListenerModel)arstream.AsyncState; var endstream = md.NetStream; var client = md.Client; if (!_isListener) { endstream.Dispose(); client.Close(); return; } int len; try { len = endstream.EndRead(arstream); } catch { OnLog(string.Format("客户端:{0} 连接失败", client.Client.RemoteEndPoint)); return; } var msg = Coding.GetString(buffer, 0, len); BaseClient myclient; if (msg.Contains("Sec-WebSocket-Key")) { //封装WebSocket握手协议 var clientMsg = PackageHandShakeData(buffer, len); //发送握手协议 endstream.Write(clientMsg, 0, clientMsg.Length); myclient = new ServerWebClient(client, ClientType.WebSocket); PushClient(myclient); } else if (msg.Contains(Mark)) { msg = msg.Remove(msg.Length - 1, 1); var x = JsonHelper.Deserialize <Record>(msg); if (x.Type != ComdType.Identity) { return; } var clientType = (ClientType)int.Parse(x.Data); myclient = new ServerClient(client, clientType); PushClient(myclient); } else { endstream.Close(); client.Close(); } Array.Clear(buffer, 0, buffer.Length); // 清空缓存,避免脏读 }, model); } catch { OnLog(string.Format("客户端:{0} 连接失败", ct.Client.RemoteEndPoint)); } try { lisn.BeginAcceptTcpClient(Back, lisn); } catch { OnLog("服务器异常退出"); } }