我是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上这样做。
答案 0 :(得分:0)
您使用的是阻塞套接字还是非阻塞套接字? recv()
的返回值是多少?您有可能在阅读之前阅读,recv()
正在返回您忽略的错误代码。你所展示的太简单了。正确的套接字编码需要更多逻辑(当发生不完整的发送/读取时循环,使用select()
检测套接字状态,错误处理等)
答案 1 :(得分:0)
当您作为发件人与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:Receptor - 本地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;
确保您的套接字处于阻止模式。