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

📄 checkhttp.c

📁 我的本科生毕业设计
💻 C
字号:
#include "checkHttp.h"#include "reportToConsole.h"/*this file must all modifye TODO:*/int ClientSocket[MaxHttpUrl];long long sendPacket[MaxHttpUrl];long long recvPacket[MaxHttpUrl];char protocolPacket[MaxHttpUrl][MAX_PACKET];int aSendNum;int aRecvNum;time_t sTime,eTime;fd_set HTTPSet,testSet;char tmpcheck[100];extern FILE *httpLogFd;void analysis(){	int i;	float rate;	int downNum = 0;	int notSmoothNum = 0;	int wellNum = 0;	for (i = 0;i < HttpUrlNum;i++)	{		if (ClientSocket[i] != -1)		{				rate =(float) recvPacket[i]/sendPacket[i];/*  rate of pocket recv */			if (rate < RATE_LEVEL)			{				notSmoothNum++;				sprintf(tmpcheck,"[WARNING] www server:%s is not smooth;the rate is %f\n",HttpUrl[i],rate);				display(textHttpBuff,tmpcheck,httpLogFd);			}			else			{				wellNum++;				sprintf(tmpcheck,"[OK] www server:%s is well,the rate is:%f\n",HttpUrl[i],rate);				display(textHttpBuff,tmpcheck,httpLogFd);			}		}		else			downNum++;	}	if (HTTPServFd != -1)		reportToConsole("HTTP",HTTPServFd,downNum,notSmoothNum,wellNum);}int searchFd(int fd){	int i;	for (i = 0;i < HttpUrlNum;i++)	{		if (fd == ClientSocket[i])			break;	}	return i;}void newSockFd(){	int i;	for (i = 0;i < HttpUrlNum;i++)	{		close(ClientSocket[i]);		servConnect(HttpUrl[i],&(ClientSocket[i]),HttpPort,textHttpBuff,httpLogFd); 	}}void mkSendPacket(){	int i;	bzero(&protocolPacket,sizeof(protocolPacket));	for (i = 0;i < HttpUrlNum;i++)	{		if (ClientSocket[i] != -1)			genHttpPacket(HttpUrl[i],protocolPacket[i]);	}}void sendData(){	int i;	aSendNum = 0;	for (i = 0;i < HttpUrlNum;i++)		{			if (ClientSocket[i] != -1)			{				int res;				int sendBuffSize = strlen(protocolPacket[i]);				res = write(ClientSocket[i],protocolPacket[i],sendBuffSize); /* no block */				if (res == -1) 				{					//perror("write");					close(ClientSocket[i]);					FD_CLR(ClientSocket[i],&testSet);					FD_CLR(ClientSocket[i],&HTTPSet);					continue;				}				else  				{					aSendNum++;					sendPacket[i]++;				}			}		}}void selectHandle(){	char recvBuff[256];	int fd;	for (fd = 0;fd < FD_SETSIZE;fd++)	{		if (FD_ISSET(fd,&testSet))		{			aRecvNum++;			int nread;			ioctl(fd,FIONREAD,&nread);			if (nread == 0)			{				sprintf(tmpcheck,"[FAILURE] www server disconncet\n");				display(textHttpBuff,tmpcheck,httpLogFd);			}			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						   recvPacket[id]++;				}*/				int id;				id = searchFd(fd);				recvPacket[id]++;				sprintf(tmpcheck,"[MESSAGE] www server: %s send %lld packets,and receive %lld packets\n",						HttpUrl[id],sendPacket[id],recvPacket[id]);				display(textHttpBuff,tmpcheck,httpLogFd);				//	printf("%ld packets\n",recvPacket[id]);			}			close(fd);			FD_CLR(fd,&HTTPSet);		}	}}void  resetSet(){	int i;	FD_ZERO(&HTTPSet);	for (i = 0;i < HttpUrlNum;i++)	{		if (ClientSocket[i] != -1)			FD_SET(ClientSocket[i],&HTTPSet);	}}void handle(){	time_t s_t,e_t;	int i;	struct timeval timeOut;	newSockFd(); /*make the http url connect*/	resetSet(); 	/*add the socket to the readset*/	aRecvNum = 0;	sendData();	s_t = time((time_t*)0);	while (1)	{		testSet = HTTPSet;		timeOut.tv_sec = SELECT_TIME_SEC;		timeOut.tv_usec = SELECT_TIME_USEC; /* time out is 1 second */		int res;		res = select(FD_SETSIZE,&testSet,(fd_set*)NULL,(fd_set*)NULL,&timeOut);		switch(res)		{			case 0 ://				printf("time out\n");				break;			case -1 ://				printf("http select\n");				break;//				exit(-1);			default :				selectHandle();				s_t = time((time_t*)0);				break;		}		e_t = time((time_t*)0);		double diff_t;		diff_t = difftime(e_t,s_t);		if (aRecvNum >= aSendNum || diff_t > RECV_TIME_OUT )  /*time  controll*/			break;	}}void checkHttp(){	int i ;	for (i = 0;i <HttpUrlNum;i++)		sendPacket[i] = recvPacket[i] = 0;	sTime = time((time_t*)0);	mkSendPacket();	while (running)	{		handle();		eTime = time((time_t*)0);		double diffTime;		diffTime = difftime(eTime,sTime);		if (diffTime >= CHECK_TIME_VAL)  /* check between CHECK_TIME_VAL*/		{			sTime = eTime;			analysis(); /*  analays 	the 		all		 socket */		}		sleep(1);	}}

⌨️ 快捷键说明

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