private void ParseAccpetData(byte[] recBuffer, int length, Client_Hash client_Hash) { // throw new NotImplementedException(); ProtocolPack protocolPack = new ProtocolPack(); protocolPack.Bytes = new byte[length]; Array.Copy(recBuffer, protocolPack.Bytes, length); protocolPack.Client = client_Hash; ProtocolPackEvent(this, new ProtocolPackEventArgs(protocolPack)); }
private void KeepAlive(object state) { // throw new NotImplementedException(); Client_Hash client = (Client_Hash)state; client.CurrentCount = 0; try { while (true) { client.CurrentCount++; if (client.CurrentCount >= 10) { client.IsRead = false; byte[] send = Encoding.Default.GetBytes("isKeepAlive"); client.ClientSocket.Send(send); client.ClientSocket.ReceiveTimeout = 10000; byte[] bytes = new byte[1024]; int length = client.ClientSocket.Receive(bytes, SocketFlags.None); if (length != 0) { client.CurrentCount = 0; bytes = null; client.IsRead = true; } bytes = null; } Thread.Sleep(1000); } } catch (Exception ex) { if (client.ClientSocket != null) { client.ClientSocket.Close(); client.ClientSocket = null; client.TokenSource.Cancel(); client_Hashes.Remove(client); client.CurrentCount = 0; client.IsRead = false; ProtocolClientEvent(this, new ProtocolClientEventArgs(client_Hashes)); } // throw; } }
private void MES_ServerAccpetData(CancellationToken token, Client_Hash client, object state) { try { while (true) { if (!client.IsRead) { continue; } if (token.IsCancellationRequested) { break; } if (client.ClientSocket.Poll(1000000, SelectMode.SelectRead) && client.IsRead) { int length = client.ClientSocket.Receive(recBuffer, SocketFlags.None); string result = Encoding.Default.GetString(recBuffer, 0, length); if (result == "isKeepAlive") { client.ClientSocket.Send(recBuffer, 0, length, SocketFlags.None); } client.CurrentCount = 0; if (length != 0) { ParseAccpetData(recBuffer, length, client); } } } } catch (Exception ex) { if (client.ClientSocket != null) { client.ClientSocket.Close(); client.ClientSocket = null; client.TokenSource.Cancel(); client_Hashes.Remove(client); client.CurrentCount = 0; client.IsRead = false; ProtocolClientEvent(this, new ProtocolClientEventArgs(client_Hashes)); } } }
private void ServerListen() { try { while (true) { ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ServerSocket.Bind(new IPEndPoint(IPAddress.Parse(ServerIP), ServerPort)); ServerSocket.Listen(10); while (true) { Socket clientSocket = ServerSocket.Accept(); IPEndPoint remoteEndPoint = (IPEndPoint)clientSocket.RemoteEndPoint; Client_Hash client = new Client_Hash(); client.Client_IP = remoteEndPoint.Address.ToString(); client.Client_Port = remoteEndPoint.Port; client.ClientSocket = clientSocket; client.CurrentCount = 0; client.IsRead = true; client.TokenSource = new CancellationTokenSource(); client_Hashes.Add(client); ProtocolClientEvent(this, new ProtocolClientEventArgs(client_Hashes)); ThreadPool.QueueUserWorkItem((o) => { MES_ServerAccpetData(client.TokenSource.Token, client, o); }); if (isKeepAlive) { ParameterizedThreadStart pts = new ParameterizedThreadStart(KeepAlive); Thread thread = new Thread(pts); thread.IsBackground = true; thread.Start(client); } } } } catch (Exception ex) { } }