Показать сообщение отдельно
  #3  
Старый 29.08.2011, 16:15
Olgir Olgir вне форума
Прохожий
 
Регистрация: 25.08.2011
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
а как ты видишь, что тебе вернули только одну строку???
Смотрю с помощью трассировки в получившийся после вызова функции массив и вижу там такую строку:
"250 Тут некоторый ответ #13#10 00000000000000000000000000000...
Все как положено - код, потом текст, потом перенос строки. Но дальше нулями забито все до конца массива, т.е., из пяти строк в мой массив пришла лишь одна. Массив, напоминаю, msg: array[0..1023] of AnsiChar;

Цитата:
Сообщение от lmikle
есть подозрение, что ты просто неправильно обрабатываешь ответ.
У меня тоже такое подозрение. Но в мануалах именно так все описано. Потому я и решил обратиться за помощью на форум - быть может, тут подскажут, как правильно работать с recv()? Может есть возможность какой-то другой функцией читать то, что находится в буфере приема?

Еще читал, что к данным пришедшим на сокет можно обращаться с помощью ReadFile. Программа компилируется, никаких исключений функция не генерит, она просто ничего не читает. Вобщем, хотелось бы совет, желательно с примером, а еще лучше, какое-нибудь хорошее чтиво по сокетам...


UPD: я дико извиняюсь, изначально неверно сформулировал проблему! Только что нашел небольшой косяк, немного переписал код. Сейчас переформулирую...

Соединяюсь с сервером, получаю приветствие от него.
Код:
connect(sock, SAddr, Sizeof(SAddr));
ret:=recv(sock,msg,1024,0);

msg: 220 SMTP technoac.ru ESMTP #10#13
ret: 28

Отправляю приветствие серверу.
Код:
msg:='EHLO';
ret:=send(sock,msg,Length(msg),0);

msg: EHLO
ret: 4

Пытаюсь получить ответ.
Код:
ret:=recv(sock,msg,1024,0);

На этом месте функция recv() виснет и не отдает управление. Что-то я явно делаю не так, но что?
В этом месте как раз и предполагаются искомые 5 строк текста, вместо этого я вообще ничего не получаю.
Ответить с цитированием