private void ReceiveCallback(IAsyncResult ar)
        {
            try
            {
                // Retrieve the state object and the client socket
                // from the asynchronous state object.
                StateObjectSocketClient state = (StateObjectSocketClient)ar.AsyncState;
                // Read data from the remote device.
                int bytesRead = state.workSocket.EndReceive(ar);

                if (bytesRead > 0)
                {
                    //response = state.sb.ToString();
                    _isConnected = true;
                    if (OnReceiveMsg != null)
                    {
                        OnReceiveMsg(state.buffer);
                    }
                    if (OnReceiveWithRemoteIPMsg != null)
                    {
                        OnReceiveWithRemoteIPMsg(state.buffer, _socketClientInfo.workSocket.RemoteEndPoint.ToString());
                    }
                    Array.Clear(_socketClientInfo.buffer, 0, _socketClientInfo.BUFF_SIZE);
                    // Get the rest of the data.
                    state.workSocket.BeginReceive(state.buffer, 0, _socketClientInfo.BUFF_SIZE, 0, new AsyncCallback(ReceiveCallback), state);
                }
                else
                {
                    IsServerShutdown();
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (_socketClientInfo.workSocket == null)
                {
                    IsServerShutdown();
                }
                else
                {
                    if (_socketClientInfo.workSocket.Connected != true)
                    {
                        IsServerShutdown();
                    }
                }
            }
        }
 public SocketClientManager(int BuffSize)
 {
     _socketClientInfo           = new StateObjectSocketClient();
     _socketClientInfo.BUFF_SIZE = BuffSize;
     _socketClientInfo.buffer    = new byte[BuffSize];
 }