StreamReader.ReadLine() всегда завершается с ошибкой при использовании с POP3

#c# #sockets #ssl

#c# #сокеты #ssl

Вопрос:

Мне всегда не удается прочитать из потока в следующем блоке моего кода.

 Data = "STAT" CRLF;             
            szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
            NetStrm.Write(szData,0,szData.Length);
            Status.Items.Add(RdStrm.ReadLine());
  

Пример кода приведен ниже.

 // create server POP3 with port 995
        Server = new TcpClient(POPServ.Text,995);                               
        Status.Items.Clear();

        try
        {
            // initialization
            NetStrm = Server.GetStream();
            RdStrm= new StreamReader(Server.GetStream());
            Status.Items.Add(RdStrm.ReadLine());

            // Login Process
            Data = "USER "  User.Text CRLF;             
            szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
            NetStrm.Write(szData,0,szData.Length);
            Status.Items.Add(RdStrm.ReadLine());

            Data = "PASS "  Passw.Text CRLF;                
            szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
            NetStrm.Write(szData,0,szData.Length);
            Status.Items.Add(RdStrm.ReadLine());

            // Send STAT command to get information ie: number of mail and size
            Data = "STAT" CRLF;             
            szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
            NetStrm.Write(szData,0,szData.Length);
            Status.Items.Add(RdStrm.ReadLine());
  

Я также хочу включить SSL. Пожалуйста, помогите мне!!!

Комментарии:

1. Сбой? Каким образом это приводит к сбою?

Ответ №1:

         var client = new TcpClient(serverName, port);

        var sslStream = new System.Net.Security.SslStream(m_client .GetStream());
        sslStream .AuthenticateAsClient(serverName);
  

Все выглядит хорошо. Просто ли время ожидания чтения? Получаете ли вы сообщения OK во время входа в систему? Я бы попробовал выполнить чтение буфера, чтобы посмотреть, получаете ли вы что-нибудь обратно. Также попробуйте другую команду.

Я никогда не использовал ReadLine () для сетевых потоков. Я всегда использовал BeginRead.

Поток.BeginRead, затем проверяется перевод строки возврата каретки.

http://msdn.microsoft.com/en-us/library/system.io.stream.beginread.aspx