/// <summary>
        /// Receives a string from remote.
        /// </summary>
        /// <returns>String received.</returns>
        public ResponseResultGeneric <string> ReceiveString()
        {
            try
            {
                OnBeforeReceive(null);
                byte[] requestLen_Host2NetworkOrder_Array = new byte[4];

                Receive(socket__, requestLen_Host2NetworkOrder_Array, 0, 4, 0);

                int requestLen_Host2NetworkOrder = BitConverter.ToInt32(requestLen_Host2NetworkOrder_Array, 0);

                int requestLen = IPAddress.NetworkToHostOrder(requestLen_Host2NetworkOrder);

                byte[] finalBytesReceive = new byte[requestLen];

                Receive(socket__, finalBytesReceive, 0, requestLen, 0);

                DataPackage dp = (DataPackage)DataPackage.Deserialize(finalBytesReceive);
                if (dp.StreamType == StreamType.stString)
                {
                    string ret = Encoding.ASCII.GetString(dp.Bytes, 0, dp.ActualBufferLength);
                    ResponseResultGeneric <string> result = new ResponseResultGeneric <string>();
                    result.Result     = ret;
                    result.ErrorLevel = dp.ErrorLevel;
                    return(result);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                this.OnCommunicationException(new ExceptionEventArgs(ex));
                return(null);
            }
            finally
            {
                OnAfterReceive(null);
            }
        }