部分代码如下,发送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;

解决方案 »

  1.   

     ZeroMemory(SendMsg,sizeof(SendMsg));
            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---------
    ------------------------------------
    我知道你是哪个
      

  2.   

    接收后你可以通过recv返回的长度来查看自己recvMsg的长度,其余的信息都是不用的。