Я читал C # 4.0 в двух словах Джозефа и Бена Албахари и наткнулся на этот код в главе «Сеть», которая читает почту с использованием POP3. У POP3 есть определенная связь, как мы все знаем. Когда я использую код в этой главе, кажется очевидным, что он должен работать, но это не так. Это код:
private static string ReadLine(Stream stream)
{
List<byte> list = new List<byte>();
while (true)
{
int b = stream.ReadByte();
if (b == 10 || b < 0) break;
if (b != 13) list.Add( (byte)b);
}
return Encoding.UTF8.GetString(list.ToArray());
}
private static void SendCommand(Stream stream, string line)
{
byte[] byteArr = Encoding.UTF8.GetBytes(line + "\r\n");
stream.Write(byteArr, 0, byteArr.Length);
string response = ReadLine(stream);
if (!response.StartsWith("+OK"))
throw new Exception("Pop exception: " + response);
}
static void Main(string[] args)
{
using (TcpClient client = new TcpClient("pop.gmail.com", 995))
{
using (NetworkStream stream = client.GetStream())
{
ReadLine(stream);
}
}
Код неполный в том смысле, что он не загружает почту. Я просто пытался понять, какой первый ответ мы получаем из Gmail. Но, к сожалению, программа просто зависает в методе ReadByte
в ReadLine
. Я думаю, что я должен получить эту строку при первом подключении к Gmail:
+OK Hello there.
Но моя программа просто зависает. На этой странице:
http://mail.google.com/support/bin/answer.py?answer=13287
Вы должны подключиться к pop.gmail.com, что я и сделал. Кто-нибудь может сказать мне, чего не хватает?
Примечание: Не присылайте мне какие-либо сторонние проекты, чтобы сделать это. Я знаю, что их очень легко использовать. Но я просто пытаюсь увидеть, что происходит под капотами. Было бы лучше, если бы вы обнаружили ошибку в самой моей программе.
Спасибо.