|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.08.2011, 14:18 | #1 |
Регистрация: 29.08.2011
Сообщений: 4
|
Recv() и многострочные ответы
Пишу софтину для почтовой рассылки. Софтина посредством WinSock должна подконнектиться к серверу, авторизоваться и рассылать письма.
Происходит все так: connect(sock, SAddr, Sizeof(SAddr)) ... msg:='EHLO'; ret:=send(sock,msg,Length(msg),0); ... ret:=recv(sock,msg,1024,0); Вот тут то я, собственно и застопорился. Подключаясь к серверу с помощью telnet и отправляя ему "EHLO" я получаю в ответ 5 строк. Функция recv отдает мне в буфер msg (msg: array[0..1023] of AnsiChar) лишь первую строку, оканчивающуюся на CrLf. Если я пытаюсь вызвать recv еще раз, программа наглухо виснет - оно и понятно, сервер ведь больше ничего не отвечает. Внимание вопрос! Куда делись оставшиеся 4 строки ответа и как их получить в буфер msg? Ковыряю гугл второй день, все глухо, во всех примерах по Winsock ничего подобного не объясняется, да и вообще, поверхностные они какие-то... И да, не посылайте меня, пожалуйста, в сторону инди и TCPClient. Я хочу сделать все именно на Winsock и никак иначе. Версия библиотеки - 2.0. Буду очень благодарен, если посоветуете ХОРОШЕЕ руководство по Winsock, желательно для Delphi, желательно на русском языке. Заранее спасибо! UPD: Я дико извиняюсь - изначально неверно сформулировал проблему! Правильная формулировака ниже! Последний раз редактировалось Olgir; 29.08.2011 в 16:48. |
29.08.2011, 16:15 | #2 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
|
|
29.08.2011, 16:42 | #3 | |
Регистрация: 29.08.2011
Сообщений: 4
|
Цитата:
Соединяюсь с сервером, получаю приветствие от него. Код:
ret: 28 Отправляю приветствие серверу. Код:
ret: 1024 или 4, если меняю массив msg на строку. Пытаюсь получить ответ. Код:
В этом месте как раз и предполагаются искомые 5 строк текста, вместо этого я вообще ничего не получаю. А ведь сервер, по крайней мере, должен ответить "5хх", если команда дошла неверно. Последний раз редактировалось Olgir; 29.08.2011 в 16:56. |
|
29.08.2011, 17:07 | #4 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
А у тебя его и в помине нет. Т.е. сервер ждет когда ты сподобишься послать ему CRLF, после чего он начнет анализировать поданную ему команду и возвращать результат, если команда корректна в данном контексте. А что, твой сервер разве не ждет в команде EHLO доменное имя (или адрес) хоста-клиента, здоровающегося с сервером ? Последний раз редактировалось mss; 29.08.2011 в 17:10. |
|
29.08.2011, 23:58 | #5 | |
Регистрация: 29.08.2011
Сообщений: 4
|
Цитата:
Не могу сказать, почему так, но нашему серверу все равно, что там после ехло будет. Вероятно из-за того, что дальше пойдем авторизация методом plain. |
|
30.08.2011, 09:19 | #6 |
Регистрация: 29.08.2011
Сообщений: 4
|
Действительно, все дело было в том, что я не передавал #10#13 в конце строки! Спасибо за помощь, проблема решена!
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Многострочные Item'ы в CheckListBox'е | ex.cluz | Компоненты Delphi | 0 | 09.06.2010 22:10 |
recv() | Артэс | C/C++ Сетевое программирование | 7 | 15.01.2010 14:51 |
многострочные коментарии | Vano-sie72 | Win Api | 2 | 31.05.2009 21:18 |
Многострочные ячейки в таблице | Sinker | БД в Delphi | 5 | 29.03.2009 18:31 |
Многострочные надписи в узлах VirtualDrawTree | Mitron | Общие вопросы Delphi | 4 | 01.02.2008 23:06 |