⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkpop3.c

📁 我的本科生毕业设计
💻 C
字号:
#include "checkPOP3.h"#include "reportToConsole.h"/*this file must all modifye TODO:*/int POP3SockFd[MaxPOP3Url];long long POP3sendPacket[MaxPOP3Url];long long POP3recvPacket[MaxPOP3Url];char STMPprotocolPacket[MAX_PACKET];int POP3aSendNum;int POP3aRecvNum;time_t POP3sTime,SMTPeTime;fd_set POP3readSet,POP3testSet;char POP3tmpcheck[100];extern FILE *POP3LogFd;void POP3analysis(){	int i;	float rate;	int downNum = 0;	int notSmoothNum = 0;	int wellNum = 0;	for (i = 0;i < POP3UrlNum;i++)	{		if (POP3SockFd[i] != -1)		{				rate =(float) POP3recvPacket[i]/POP3sendPacket[i];/*  rate of pocket recv */			if (rate < RATE_LEVEL)			{				notSmoothNum++;				sprintf(POP3tmpcheck,"[WARNING] POP3 server:%s is not smooth;the rate is %f\n",POP3Url[i],rate);				display(textPOP3Buff,POP3tmpcheck,POP3LogFd);			}			else			{				wellNum++;				sprintf(POP3tmpcheck,"[OK] POP3 server:%s is well,the rate is:%f\n",POP3Url[i],rate);				display(textPOP3Buff,POP3tmpcheck,POP3LogFd);			}		}		else			downNum++;	}	if (POP3ServFd != -1)		reportToConsole("POP3",POP3ServFd,downNum,notSmoothNum,wellNum);}int POP3searchFd(int fd){	int i;	for (i = 0;i < POP3UrlNum;i++)	{		if (fd == POP3SockFd[i])			break;	}	return i;}void POP3newSockFd(){	int i;	for (i = 0;i < POP3UrlNum;i++)	{		close(POP3SockFd[i]);		servConnect(POP3Url[i],&(POP3SockFd[i]),POP3Port,textPOP3Buff,POP3LogFd); 	}}void POP3mkSendPacket(){	int i;	bzero(&STMPprotocolPacket,sizeof(STMPprotocolPacket));	genPOP3Packet(POP3Url[0],STMPprotocolPacket);}void POP3sendData(){	int i;	POP3aSendNum = 0;	for (i = 0;i < POP3UrlNum;i++)		{			if (POP3SockFd[i] != -1)			{				int res;				int sendBuffSize = strlen(STMPprotocolPacket);				res = write(POP3SockFd[i],STMPprotocolPacket,sendBuffSize); /* no block */				if (res == -1) 				{					//perror("write");					close(POP3SockFd[i]);					FD_CLR(POP3SockFd[i],&POP3testSet);					FD_CLR(POP3SockFd[i],&POP3readSet);					continue;				}				else  				{					POP3aSendNum++;					POP3sendPacket[i]++;				}			}		}}void POP3selectHandle(){	char recvBuff[256];	int fd;	for (fd = 0;fd < FD_SETSIZE;fd++)	{		if (FD_ISSET(fd,&POP3testSet))		{			POP3aRecvNum++;			int nread;			ioctl(fd,FIONREAD,&nread);			if (nread == 0)			{				sprintf(POP3tmpcheck,"[FIALURE] POP3 server disconnect\n");				display(textPOP3Buff,POP3tmpcheck,POP3LogFd);			}			else			{				int recvBuffSize = strlen(recvBuff);				read(fd,recvBuff,recvBuffSize);  		/*		int res;				res = analysPacket(recvBuff);				if (res == 1)				{					 int id;					  determine the id which socket fd is sockfd						   POP3recvPacket[id]++;				}*/				int id;				id = POP3searchFd(fd);				POP3recvPacket[id]++;				sprintf(POP3tmpcheck,"[MESSAGE] POP3 server: %s send %lld packets,and receive %lld packets\n",						POP3Url[id],POP3sendPacket[id],POP3recvPacket[id]);				display(textPOP3Buff,POP3tmpcheck,POP3LogFd);			}			close(fd);			FD_CLR(fd,&POP3readSet);		}	}}void  POP3resetSet(){	int i;	FD_ZERO(&POP3readSet);	for (i = 0;i < POP3UrlNum;i++)	{		if (POP3SockFd[i] != -1)			FD_SET(POP3SockFd[i],&POP3readSet);	}}void POP3handle(){	time_t s_t,e_t;	int i;	struct timeval timeOut;	POP3newSockFd(); /*make the POP3 url connect*/	POP3resetSet(); 	/*add the socket to the readset*/	POP3aRecvNum = 0;	POP3sendData();	s_t = time((time_t*)0);	while (1)	{		POP3testSet = POP3readSet;		timeOut.tv_sec = SELECT_TIME_SEC;		timeOut.tv_usec = SELECT_TIME_USEC; /* time out is 1 second */		int res;		res = select(FD_SETSIZE,&POP3testSet,(fd_set*)NULL,(fd_set*)NULL,&timeOut);		switch(res)		{			case 0 ://				printf("time out\n");				break;			case -1 ://				printf("pop3 select\n");				break;//				exit(-1);			default :				POP3selectHandle();				s_t = time((time_t*)0);				break;		}		e_t = time((time_t*)0);		double diff_t;		diff_t = difftime(e_t,s_t);		if (POP3aRecvNum >= POP3aSendNum || diff_t > RECV_TIME_OUT )  /*time  controll*/			break;	}}void checkPOP3(){	int i ;	for (i = 0;i <POP3UrlNum;i++)		POP3sendPacket[i] = POP3recvPacket[i] = 0;	POP3sTime = time((time_t*)0);	POP3mkSendPacket();	while (running)	{		POP3handle();		SMTPeTime = time((time_t*)0);		double diffTime;		diffTime = difftime(SMTPeTime,POP3sTime);		if (diffTime >= CHECK_TIME_VAL)  /* check between CHECK_TIME_VAL*/		{			POP3sTime = SMTPeTime;			POP3analysis(); /*  analays 	the 		all		 socket */		}		sleep(1);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -