Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Подключение к серверу "POP3"  (Прочитано 19915 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kultura
Помогающий

ru
Offline Offline

« : 06-09-2009 18:04 » 

Пробую сделать простенький почтовый клиент. Система win XP, msvs c++ 2008.
При подключении к серверу выскакивает исключение "удаленный хост принудительно разорвал подключение"

Вот мой код:
Код:
String ^ ssTemp = nullptr;
TcpClient ^ server = nullptr;
NetworkStream ^ netStrm = nullptr;
StreamReader ^ rdStrm = nullptr;

server = gcnew TcpClient ("pop.gmail.com", 995);
netStrm = server->GetStream ();
rdStrm = gcnew StreamReader (netStrm);

String ^ ssData = "USER " + "myusername@gmail.com" + "\r\n";
cli::array<unsigned char> ^ clicData = System::Text::Encoding::ASCII->GetBytes (ssData->ToCharArray ());
netStrm->Write (clicData, 0, clicData->Length);
ssTemp = rdStrm->ReadLine ();

Как раз на последней строчке при попытке ReadLine (ssTemp = rdStrm->ReadLine ( ); ) и выскакивает исключение. Помогите, пожалуйста, разобраться, в чем тут дело.

Почтовый ящик существует, POP3 в нем включен, настройки перепроверял ("pop.gmail.com", 995)  Здесь была моя ладья...
« Последнее редактирование: 06-09-2009 18:10 от Kultura » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 06-09-2009 18:50 » 

Вроде такая проблема уже обсуждалась когда то. Виновата оказалась концовка "\r\n". Нужно просто "\n"
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Kultura
Помогающий

ru
Offline Offline

« Ответ #2 : 07-09-2009 06:12 » 

Вроде такая проблема уже обсуждалась когда то. Виновата оказалась концовка "\r\n". Нужно просто "\n"

да нет, не помогает (заодно попробовал и "\n\r" и "\n" и "\r")
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 07-09-2009 07:46 » 

По-моему, "\r\n" - правильный перевод строки для подобных протоколов. Во всяком случае, в HTTP так. Скорее всего, не хватает ещё одной, пустой строки, которая указывает на конец заголовка.
Попробуй
Код:
String ^ ssData = "USER " + "myusername@gmail.com" + "\r\n\r\n";
Это не то чтобы совсем пальцем в небо, но я не уверен, что нужно именно так Улыбаюсь
Записан
Kultura
Помогающий

ru
Offline Offline

« Ответ #4 : 07-09-2009 08:55 » 

По-моему, "\r\n" - правильный перевод строки для подобных протоколов. Во всяком случае, в HTTP так. Скорее всего, не хватает ещё одной, пустой строки, которая указывает на конец заголовка.
Попробуй
Код:
String ^ ssData = "USER " + "myusername@gmail.com" + "\r\n\r\n";
Это не то чтобы совсем пальцем в небо, но я не уверен, что нужно именно так Улыбаюсь

Нет, не работает. При этом netStrm->Write (clicData, 0, clicData->Length); выполняется вроде бы нормально (при любых \r и \n), а исключение появляется на ReadLine ()  Здесь была моя ладья...

Может RFC поискать, только какой из них мне нужен?
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 07-09-2009 09:15 » 

Kultura, если удалённый хост разрывает соединение, значит, ты что-то не так передаёшь. Для начала, читать стоит http://www.ietf.org/rfc/rfc1939.txt
Потом ещё наверняка потребуется читать RFC по конкретному расширению для авторизации.
Записан
Kultura
Помогающий

ru
Offline Offline

« Ответ #6 : 07-09-2009 09:30 » 

Kultura, если удалённый хост разрывает соединение, значит, ты что-то не так передаёшь. Для начала, читать стоит http://www.ietf.org/rfc/rfc1939.txt
Потом ещё наверняка потребуется читать RFC по конкретному расширению для авторизации.

Последнее где искать? У google (т.е. у того, к кому подключаюсь), что-то ничего по rfc пока не нахожу.

Впринципе, "USER " + "myusername@gmail.com" + "\r\n",
самая стандартная комманда (хотя любые другие комманды дают тот же эффект), а в чем еще может быть ошибка
« Последнее редактирование: 07-09-2009 09:32 от Kultura » Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #7 : 07-09-2009 10:06 » 

Недавно подключал почтового-клиента к gmail, так у них в инструкции на сайте написано:
"Сервер входящей почты (POP3), требуется SSL"

т.е. может он рвет соединение, потому что не используется SSL?

Может попробовать другой, более "простой" почтовик
« Последнее редактирование: 07-09-2009 10:08 от Артем » Записан
Kultura
Помогающий

ru
Offline Offline

« Ответ #8 : 07-09-2009 14:05 » 

Недавно подключал почтового-клиента к gmail, так у них в инструкции на сайте написано:
"Сервер входящей почты (POP3), требуется SSL"

т.е. может он рвет соединение, потому что не используется SSL?

Может попробовать другой, более "простой" почтовик

Да, и вправду, на mail.ru заработало. Спасибо.

А все таки, обучающих целей ради, как подключить SSL?
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 07-09-2009 14:37 » 

А все таки, обучающих целей ради, как подключить SSL?
Смотри библиотеку OpenSSL.
Записан
Kultura
Помогающий

ru
Offline Offline

« Ответ #10 : 07-09-2009 17:28 » 

А все таки, обучающих целей ради, как подключить SSL?
Смотри библиотеку OpenSSL.

Почитал про OpenSSL.  Пока не совсем понимаю, как это связать с моей задачей - получения почты с защищенного SSL сервера.
System::Net::Sockets::TcpClient уже не годится?
В общем, вопрос такой: что используется вместо TcpClient и в каком месте применяется OpenSSL?
Ну, как говороится, что знал, то  сказал. 
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 08-09-2009 18:38 » 

Kultura, передача данных остается, но добавляется прослойка SSL. После настройки и подключения SSL к сокету, разница только в том, что читать и писать надо через функционал SSL, а мониторить наличие входных данных и состояние канала - как раньше.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Kultura
Помогающий

ru
Offline Offline

« Ответ #12 : 10-09-2009 16:49 » 

Kultura, передача данных остается, но добавляется прослойка SSL. После настройки и подключения SSL к сокету, разница только в том, что читать и писать надо через функционал SSL, а мониторить наличие входных данных и состояние канала - как раньше.

Ну, в общем, понятно, с бравого наскока SSL не победить. А есть какая-нибудь хорошая книжечка по сокетам и сетевому программированию, что б подобные вещи были хорошо объяснены?
« Последнее редактирование: 10-09-2009 16:55 от Kultura » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #13 : 10-09-2009 18:49 » new

Для Linux систем довольно хорошая книга Шон Уолтон "Создание сетевых приложений в среде Linux: Руководство Разработчика."  В принципе там довольно хорошо описана работа с сокетами. Переносимость под винду где то на 90 процентов. Просто в MS в вопросе сокетов некоторые моменты пошли своим путем.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 10-09-2009 20:56 » 

Для Unix — Стивенс, "Unix: разработка сетевых приложений".

Про SSL — доки на openssl.org.
« Последнее редактирование: 12-09-2009 10:08 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 10-09-2009 21:07 » 

В .NET есть реализация SSLStream, который элементарно прикручивается к TcpClient - насколько понимаю, как раз для таких случаев: http://msdn.microsoft.com/en-us/library/system.net.security.sslstream.aspx И не надо ничего изобретать с OpenSSL Улыбаюсь
По ссылке есть пример клиентского кода.
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #16 : 11-09-2009 07:04 » 

А есть какая-нибудь хорошая книжечка по сокетам и сетевому программированию, что б подобные вещи были хорошо объяснены?

Мне очень помогла "Протоколы TCP/IP. В подлиннике" Стивенса. У меня бумажная версия, но думаю, можно найти и в электронном.

Мне она понравиласьтем, что там довольно доходчиво (и главное -- применительно к программированию) описаны многих "администраторские" вещи (касательно сетевого взаимодействия), которые мне (как программисту) были не известны или не понятны.

P.S. По моему, я даже видел ее на этом сайте в ресурсах...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 12-09-2009 10:09 » 

Артем, совершенно верно, но в у нас она на английском.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Kultura
Помогающий

ru
Offline Offline

« Ответ #18 : 15-09-2009 14:30 » 

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines