Общение с сервером в Win32; как я вижу ответ сервера? - PullRequest
0 голосов
/ 16 января 2011

Я новичок в программировании на Win32.

sprintf(lpszBuff,"HELO Mail-Server\r\n");
     send(s,lpszBuff,strlen(lpszBuff),0);     
     recv(s,lpszBuff,100,0);
  cout << lpszBuff;

Здесь я подключаюсь к локальному почтовому серверу. Буфер содержит запрос, который я отправляю, этот же буфер содержит ответ, отправленный браузером. Как мне увидеть ответ? cout <<buffer не показывает никакого вывода. Я делаю это на VC ++ 2008.

Ответы [ 2 ]

0 голосов
/ 24 января 2011

Когда вы говорите с SMTP-сервером как отправителем, приемный / почтовый сервер должен сначала отправить 220 отправителю.

     R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready
     S: HELO USC-ISIF.ARPA
     R: 250 BBN-UNIX.ARPA

     S: MAIL FROM:<Smith@USC-ISIF.ARPA>
     R: 250 OK

     S: RCPT TO:<Jones@BBN-UNIX.ARPA>
     R: 250 OK

     S: RCPT TO:<Green@BBN-UNIX.ARPA>
     R: 550 No such user here

     S: RCPT TO:<Brown@BBN-UNIX.ARPA>
     R: 250 OK

     S: DATA
     R: 354 Start mail input; end with <CRLF>.<CRLF>
     S: Blah blah blah...
     S: ...etc. etc. etc.
     S: .
     R: 250 OK

     S: QUIT
     R: 221 BBN-UNIX.ARPA Service closing transmission channel

R: Рецептор - локальный SMTP-сервер S: указывает местного отправителя

В основном вы должны:

recv(s,lpszBuff,200,0); // for 220
cout << lpszBuff;
sprintf(lpszBuff,"HELO Mail-Server\r\n");
send(s,lpszBuff,strlen(lpszBuff),0);     
recv(s,lpszBuff,100,0);
cout << lpszBuff;

Убедитесь, что ваше гнездо находится в режиме блокировки.

0 голосов
/ 18 января 2011

Используете ли вы блокирующий или неблокирующий сокет? Что такое возвращаемое значение recv()? Скорее всего, вы читаете, прежде чем есть что-то доступное для чтения, и recv() возвращает код ошибки, который вы игнорируете. То, что вы показали, слишком упрощенно. Для правильного кодирования сокетов требуется больше логики (цикл при неполных отправках / чтениях, использование select() для обнаружения состояний сокетов, обработка ошибок и т. Д.)

...