部分代码如下,发送stat后,并不能通过recv函数接收到邮件数目和邮件大小,不知道是哪里的原因,望众位高手指点啊~~
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN sa;
sa.sin_family=AF_INET;
sa.sin_port=htons(110);
sa.sin_addr.S_un.S_addr=inet_addr("220.181.15.128");
if (connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
{
cout<<"Can't connect to the POP3-server"<<endl;
return;
}
char RecvMsg[512];
ZeroMemory(RecvMsg,sizeof(RecvMsg));
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl; char SendMsg[64];ZeroMemory(SendMsg,sizeof(SendMsg)); char Username[32];ZeroMemory(Username,sizeof(Username));
cout<<"请输入用户名"<<endl;
cin>>Username;
sprintf(SendMsg,"%s %s\r\n","user",Username);
send(sock,SendMsg,sizeof(SendMsg),0);
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl; ZeroMemory(SendMsg,sizeof(SendMsg));
char Password[32];ZeroMemory(Password,sizeof(Password));
cout<<"请输入密码"<<endl;
cin>>Password;
sprintf(SendMsg,"%s %s\r\n","pass",Password);
send(sock,SendMsg,sizeof(SendMsg),0);
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl; ZeroMemory(SendMsg,sizeof(SendMsg));
sprintf(SendMsg,"%s\r\n","stat");
send(sock,SendMsg,sizeof(SendMsg),0);
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl;
WSADATA wsaData;
WSAStartup(MAKEWORD(2,2),&wsaData);
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN sa;
sa.sin_family=AF_INET;
sa.sin_port=htons(110);
sa.sin_addr.S_un.S_addr=inet_addr("220.181.15.128");
if (connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
{
cout<<"Can't connect to the POP3-server"<<endl;
return;
}
char RecvMsg[512];
ZeroMemory(RecvMsg,sizeof(RecvMsg));
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl; char SendMsg[64];ZeroMemory(SendMsg,sizeof(SendMsg)); char Username[32];ZeroMemory(Username,sizeof(Username));
cout<<"请输入用户名"<<endl;
cin>>Username;
sprintf(SendMsg,"%s %s\r\n","user",Username);
send(sock,SendMsg,sizeof(SendMsg),0);
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl; ZeroMemory(SendMsg,sizeof(SendMsg));
char Password[32];ZeroMemory(Password,sizeof(Password));
cout<<"请输入密码"<<endl;
cin>>Password;
sprintf(SendMsg,"%s %s\r\n","pass",Password);
send(sock,SendMsg,sizeof(SendMsg),0);
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl; ZeroMemory(SendMsg,sizeof(SendMsg));
sprintf(SendMsg,"%s\r\n","stat");
send(sock,SendMsg,sizeof(SendMsg),0);
recv(sock,RecvMsg,sizeof(RecvMsg),0);
cout<<RecvMsg<<endl;
sprintf(SendMsg,"%s\r\n","stat ");
send(sock,SendMsg,strlen(SendMsg),0);
//Sleep(100);
ZeroMemory(RecvMsg,sizeof(RecvMsg));
recv(sock,RecvMsg,512,0);
cout<<RecvMsg<<endl;
用这样的格式来发,发送的时候把sizeof改成strlen,sizeof求的的是数组长度,这你的程序里面就是64,所以你发送的时候后面跟了许多的空字符,可能服务器无法解析这些字符,所以会在返回的TCP flags里面有一个reset的标志,估计是重置了POP对话,改成用strlen就是取得发送具体字符串的长度,可以成功。
上面的用户名密码都改成用strlen---------
------------------------------------
我知道你是哪个