Kultura
Помогающий
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
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #1 : 06-09-2009 18:50 » |
|
Вроде такая проблема уже обсуждалась когда то. Виновата оказалась концовка "\r\n". Нужно просто "\n"
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Kultura
Помогающий
Offline
|
|
« Ответ #2 : 07-09-2009 06:12 » |
|
Вроде такая проблема уже обсуждалась когда то. Виновата оказалась концовка "\r\n". Нужно просто "\n"
да нет, не помогает (заодно попробовал и "\n\r" и "\n" и "\r")
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #3 : 07-09-2009 07:46 » |
|
По-моему, "\r\n" - правильный перевод строки для подобных протоколов. Во всяком случае, в HTTP так. Скорее всего, не хватает ещё одной, пустой строки, которая указывает на конец заголовка. Попробуй String ^ ssData = "USER " + "myusername@gmail.com" + "\r\n\r\n";
Это не то чтобы совсем пальцем в небо, но я не уверен, что нужно именно так
|
|
|
Записан
|
|
|
|
Kultura
Помогающий
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 поискать, только какой из них мне нужен?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #5 : 07-09-2009 09:15 » |
|
Kultura, если удалённый хост разрывает соединение, значит, ты что-то не так передаёшь. Для начала, читать стоит http://www.ietf.org/rfc/rfc1939.txt Потом ещё наверняка потребуется читать RFC по конкретному расширению для авторизации.
|
|
|
Записан
|
|
|
|
Kultura
Помогающий
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 »
|
Записан
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #7 : 07-09-2009 10:06 » |
|
Недавно подключал почтового-клиента к gmail, так у них в инструкции на сайте написано: "Сервер входящей почты (POP3), требуется SSL"
т.е. может он рвет соединение, потому что не используется SSL?
Может попробовать другой, более "простой" почтовик
|
|
« Последнее редактирование: 07-09-2009 10:08 от Артем »
|
Записан
|
|
|
|
Kultura
Помогающий
Offline
|
|
« Ответ #8 : 07-09-2009 14:05 » |
|
Недавно подключал почтового-клиента к gmail, так у них в инструкции на сайте написано: "Сервер входящей почты (POP3), требуется SSL"
т.е. может он рвет соединение, потому что не используется SSL?
Может попробовать другой, более "простой" почтовик
Да, и вправду, на mail.ru заработало. Спасибо. А все таки, обучающих целей ради, как подключить SSL?
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #9 : 07-09-2009 14:37 » |
|
А все таки, обучающих целей ради, как подключить SSL?
Смотри библиотеку OpenSSL.
|
|
|
Записан
|
|
|
|
Kultura
Помогающий
Offline
|
|
« Ответ #10 : 07-09-2009 17:28 » |
|
А все таки, обучающих целей ради, как подключить SSL?
Смотри библиотеку OpenSSL. Почитал про OpenSSL. Пока не совсем понимаю, как это связать с моей задачей - получения почты с защищенного SSL сервера. System::Net::Sockets::TcpClient уже не годится? В общем, вопрос такой: что используется вместо TcpClient и в каком месте применяется OpenSSL? Ну, как говороится, что знал, то сказал.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #11 : 08-09-2009 18:38 » |
|
Kultura, передача данных остается, но добавляется прослойка SSL. После настройки и подключения SSL к сокету, разница только в том, что читать и писать надо через функционал SSL, а мониторить наличие входных данных и состояние канала - как раньше.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Kultura
Помогающий
Offline
|
|
« Ответ #12 : 10-09-2009 16:49 » |
|
Kultura, передача данных остается, но добавляется прослойка SSL. После настройки и подключения SSL к сокету, разница только в том, что читать и писать надо через функционал SSL, а мониторить наличие входных данных и состояние канала - как раньше.
Ну, в общем, понятно, с бравого наскока SSL не победить. А есть какая-нибудь хорошая книжечка по сокетам и сетевому программированию, что б подобные вещи были хорошо объяснены?
|
|
« Последнее редактирование: 10-09-2009 16:55 от Kultura »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #13 : 10-09-2009 18:49 » |
|
Для Linux систем довольно хорошая книга Шон Уолтон "Создание сетевых приложений в среде Linux: Руководство Разработчика." В принципе там довольно хорошо описана работа с сокетами. Переносимость под винду где то на 90 процентов. Просто в MS в вопросе сокетов некоторые моменты пошли своим путем.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #14 : 10-09-2009 20:56 » |
|
Для Unix — Стивенс, "Unix: разработка сетевых приложений".
Про SSL — доки на openssl.org.
|
|
« Последнее редактирование: 12-09-2009 10:08 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
|
Артем
Опытный
Offline
Пол:
Beware the wolf in sheep's clothing.
|
|
« Ответ #16 : 11-09-2009 07:04 » |
|
А есть какая-нибудь хорошая книжечка по сокетам и сетевому программированию, что б подобные вещи были хорошо объяснены?
Мне очень помогла "Протоколы TCP/IP. В подлиннике" Стивенса. У меня бумажная версия, но думаю, можно найти и в электронном. Мне она понравиласьтем, что там довольно доходчиво (и главное -- применительно к программированию) описаны многих "администраторские" вещи (касательно сетевого взаимодействия), которые мне (как программисту) были не известны или не понятны. P.S. По моему, я даже видел ее на этом сайте в ресурсах...
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #17 : 12-09-2009 10:09 » |
|
Артем, совершенно верно, но в у нас она на английском.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Kultura
Помогающий
Offline
|
|
« Ответ #18 : 15-09-2009 14:30 » |
|
Спасибо!
|
|
|
Записан
|
|
|
|
|