我是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上这样做的。
发布于 2011-01-18 16:34:39
您使用的是阻塞套接字还是非阻塞套接字?recv()的返回值是什么?很有可能,在没有任何可读的内容之前,您正在阅读,而recv()返回了一个您忽略的错误代码。您所展示的内容太简单了。正确的套接字编码需要更多的逻辑(当不完整的发送/读取发生时循环,使用select()检测套接字状态,错误处理等)
发布于 2011-01-24 19:01:46
当您作为发送方与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 channelR: 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;确保您的套接字处于块模式。
https://stackoverflow.com/questions/4703646
复制相似问题