Поток ответов TcpClient с POP3, не может прочитать больше одной строки - PullRequest
1 голос
/ 30 августа 2011

Я работаю над своей собственной библиотекой для pop3, так как я не нашел то, что мне было нужно, в тех, что были предложены здесь.Моя проблема заключается в том, что при открытии сообщения оно может прочитать только строку до определенной точки (обычно это ссылка в тексте), и оно останавливается, зацикливаясь, но не вылетая.код:

Data = "RETR 1" + CRLF;
szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
NetStrm.Write(szData, 0, szData.Length);
txtLog.Text += RdStrm.ReadLine() + CRLF;
for (int i = 0; i < 33; i++)
{

    txtLog.Text += RdStrm.ReadLine() + CRLF;
}


string szTemp;
szTemp = RdStrm.ReadLine();
// here it's supposed to start reading the actual message
while(szTemp != "-")
    {

        txtLog.Text += szTemp + CRLF;
        szTemp = RdStrm.ReadLine();

    }

Ответы [ 2 ]

1 голос
/ 30 августа 2011
Match reg1 = Regex.Match(ifOk, "OK(.*)", RegexOptions.IgnoreCase);

if (reg1.Success)
{
    txtLog.Text += "Ready To Start!\r\n";

    Data = "USER XXXX" + CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData, 0, szData.Length);
    txtLog.Text += RdStrm.ReadLine() + CRLF;

    Data = "PASS XXXX" + CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData, 0, szData.Length);
    txtLog.Text += RdStrm.ReadLine() + CRLF;

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

    Data = "RETR 1" + CRLF;
    szData = System.Text.Encoding.ASCII.GetBytes(Data.ToCharArray());
    NetStrm.Write(szData, 0, szData.Length);
    txtLog.Text += RdStrm.ReadLine() + CRLF;

    string szTemp;

    szTemp = RdStrm.ReadLine();

    // POP3 uses . as the end of a message
    while(szTemp != ".")
    {                   
        txtLog.Text += szTemp + CRLF;
        szTemp = RdStrm.ReadLine();                                               
    }              
}

, который решает проблему, похоже, что интернет нуждается в хорошем, открытом исходном коде, легко модифицируемом lib, так что я буду делать дальше. Спасибо всем. Отлично работает сейчас

0 голосов
/ 30 августа 2011

Если служба на другом конце возвращает строки, заканчивающиеся CRLF, то строки, которые вы получаете из Readline, будут иметь CR в конце.Таким образом, возвращаемая строка всегда будет! = "-".

...