Example #1
0
        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));
        }
Example #2
0
        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;
            }
        }
Example #3
0
 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));
         }
     }
 }
Example #4
0
 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) { }
 }