用SOCKET怎么得到邮件列表和信件的内容??
先贴代码:
#include <winsock2.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int res;
char szServer[128] = "pop.163.com";
char szName[128] = "USER xxxxxxx\r\n";
char szPass[128] = "PASS xxxxxxx\r\n";
char szBuffer[1024];
WSADATA wsd;
SOCKET sClient;
sockaddr_in server;
hostent* host = NULL;
WSAStartup(MAKEWORD(2,2), &wsd);
sClient = socket(AF_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_port = htons(110);
host = gethostbyname(szServer);
if (host == NULL)
{
printf("Unable to resolve server\r\n");
return 1;
}
CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);
//connect
connect(sClient, (struct sockaddr *)&server, sizeof(server));
res = recv(sClient, szBuffer, sizeof(szBuffer), 0);
szBuffer[res] = '\0';
printf("%s\n",szBuffer);
//enter name
send(sClient, szName, strlen(szName), 0);
res = recv(sClient, szBuffer, sizeof(szBuffer), 0);
szBuffer[res] = '\0';
printf("%s\n",szBuffer);
//enter password
send(sClient, szPass, strlen(szPass), 0);
res = recv(sClient, szBuffer, sizeof(szBuffer), 0);
szBuffer[res] = '\0';
printf("%s\n",szBuffer);
send(sClient, "LIST\r\n", 6, 0);//这里出问题- -
res = recv(sClient, szBuffer, sizeof(szBuffer), 0);
szBuffer[res] = '\0';
printf("%s\n",szBuffer);
closesocket(sClient);
WSACleanup();
return 0;
}
SOCKET调用默认全部调用成功,所以就没有写发生错误的代码。
问题出现在
send(sClient, "LIST\r\n", 6, 0);//这里出问题- -
res = recv(sClient, szBuffer, sizeof(szBuffer), 0);
运行的时候总是不能返回完整的列表,只能返回第一行,但是用DEBUG单步调试的时候又完全正常,可以返回正确的邮件列表。
请问这是怎么回事?要怎么解决,想了一个晚上,还是没想到答案。。。。
如果把send(sClient, "LIST\r\n", 6, 0);
改成 send(sClient, "RETR 1\r\n", 8, 0);
不能完整的收到信件的内容。怎么解决啊