private void Receive()
 {
     if (IsConnected)
     {
         _socket.BeginReceive(_receiveBuffer, 0, _receiveBuffer.Length, SocketFlags.None, OnReceiveCallback, _socket);
     }
     else
     {
         OnReceiveCompletedEvent?.Invoke(null, SocketClientResult.NotConnect);
     }
 }
        private void OnReceiveCallback(IAsyncResult result)
        {
            if (!IsRunning)
            {
                OnReceiveCompletedEvent?.Invoke(string.Empty, null, SocketServerResult.ServerNotRunning);

                return;
            }

            string ip = string.Empty;

            SocketServerResult sRes = SocketServerResult.None;

            byte[] data = null;

            int length = 0;

            try
            {
                ip = result.AsyncState as string;

                IClientSocket client = this[ip];

                length = client.Socket.EndReceive(result);

                if (length > 0)
                {
                    data = new byte[length];

                    Array.Copy(client.CacheBuffer, data, length);

                    sRes = SocketServerResult.Success;
                }
                else
                {
                    DisconnectClient(ip);
                }
            }
            catch
            {
                sRes = SocketServerResult.Exception;
            }
            finally
            {
                if (length > 0)
                {
                    OnReceiveCompletedEvent?.Invoke(ip, data, sRes);

                    Receive(ip);
                }
            }
        }
        private void OnReceiveCallback(IAsyncResult result)
        {
            SocketClientResult cRes = SocketClientResult.None;

            byte[] buffer = null;

            int length = 0;

            try
            {
                if (IsConnected)
                {
                    Socket socket = result.AsyncState as Socket;

                    length = socket.EndReceive(result);

                    buffer = new byte[length];

                    Array.Copy(_receiveBuffer, buffer, length);

                    cRes = SocketClientResult.Success;
                }
                else
                {
                    cRes = SocketClientResult.NotConnect;
                }
            }
            catch
            {
                cRes = SocketClientResult.Exception;
            }
            finally
            {
                if (length > 0)
                {
                    OnReceiveCompletedEvent?.Invoke(buffer, cRes);

                    Receive();
                }
                else
                {
                    Disconnect();
                }
            }
        }