#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#define POP3SERVPORT 110
#define MAXDATASIZE 512*1024
int main(int argc, char *argv[])
{
int sockfd;
struct hostent *host;
struct sockaddr_in serv_addr;
char *POPMessage[]={
"USER *******\r\n",
"PASS *******\r\n",
"STAT\r\n",
//"LIST\r\n",
"RETR 1\r\n",
"QUIT\r\n",
NULL
};
int iLength;
int iMsg=0;
int iEnd=0;
char buf[MAXDATASIZE];
/*if((host=gethostbyname("excnt0at.corp.good.com"))==NULL)
{
perror("gethostbyname error");
exit(1);
}*/
if((host=gethostbyname("pop3.sina.com.cn"))==NULL)
{
perror("gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket error");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(POP3SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
{
perror("connect error");
exit(1);
}
do {
send(sockfd,POPMessage[iMsg],strlen(POPMessage[iMsg]),0);
/*iLength=recv(sockfd,buf+iEnd,sizeof(buf)-iEnd,0);
iEnd+=iLength;
buf[iEnd]='\0';*/
printf("have sent: %s",POPMessage[iMsg]);
if(iMsg == 3)
{
sleep(15);
}
else if(iMsg == 4)
{
sleep(10);
}
else
{
sleep(3);
}
iLength=recv(sockfd,buf,sizeof(buf),0);
buf[iLength] = '\0';
printf("received length this time:%d\n",iLength);
//printf("received: %s\n",buf+iEnd-iLength);
printf("received: %s\n",buf);
iMsg++;
} while (POPMessage[iMsg]);
close(sockfd);
return 0;
}