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

📄 recv_message_fromcli.cxx

📁 HPunix下资源监视程序,查看监视进程的CPU、内存的参数
💻 CXX
字号:
#include <stdio.h>#include <unistd.h>#include "myptop.h"#include "sysmonitor.h"#include <dcepm.h>#include <dstruct.h>#include <oodb.h>#include <sys/select.h>#include <sys/time.h>#include <netdb.h>#include <stdlib.h>#include <iostream.h>#include <fcntl.h>#include <sys/types.h>#include <unistd.h>#include <errno.h>#include <arpa/inet.h>#include <sys/socket.h>#include <string.h>#include <strings.h>#include <signal.h>#include <semaphore.h>#define        SA      struct sockaddr#ifndef INADDR_NONE#define INADDR_NONE 0xffffffff;#endifextern sem_t *sem;extern struct NODE_INFO *nodeinfo_ptr;extern int node_num;int	fill_dcepm_sysinfor(char *ptr,int len);int	fill_dcepm_driverinfor(char *ptr,int len);int	fill_dcepm_netinfor(char *ptr,int len);int	fill_dcepm_pthreadinfor(char *ptr,int len);//int srv_accept(int fd,struct sockaddr *cli_addr,int *clilen,char* descr);int srv_init(char *service,int port,char* descr);int myreadn(int fd,char *ptr,int nbytes);void recv_message_fromcli(int socketfd){	int 	j,k,i;	char	descr[100];	int	sockfd,length;	struct  sockaddr_in tcp_cli_addr;	char 	ipaddress[30],buff[512];	int	ret_value;	char	recv_buffer[1024],send_buffer[1024];	char	*ptr;	struct 	timeval wait;	fd_set 	read_temp;	int 	status;	int	sd,retcode;	//printf("come in recv_message_fromcli ...socketfd=%d .......\n",socketfd);	while(1==1)	{		//printf(" ......... recv_message_fromcli  socketfd=%d    ...........\n",socketfd);		sockfd=socketfd;		retcode=Select_socket_status1(sockfd,0);    if(retcode<0)    {       			printf("Select_socket_status error  first---- sockfd=%d \n",sockfd);      continue;    }  		///////////////////////////////////////////////////////////////////////////read socket//////////////		bzero(recv_buffer,1024);		ptr=recv_buffer;		ret_value=read(sockfd,ptr,1);		if(ret_value<=0)		{			printf("first recv sockfd = %d,  ret_value is %d  close SOCKET \n",socketfd,ret_value);			close(socketfd);			break;		}		if((unsigned char)recv_buffer[0]==0xeb)      //value of monipara from client		{				retcode=Select_socket_status1(sockfd,0);        if(retcode<0)        {       					printf("Select_socket_status error  second\n");          continue;        }  		ret_value=read(sockfd,ptr,2);		if(ret_value<=0)		{			printf("second recv sockfd = %d,  ret_value is %d  close SOCKET \n",socketfd,ret_value);			close(socketfd);			break;		}		//printf("recv_buffer[0]=%d  recv_buffer[1]=%d \n",(unsigned char)recv_buffer[0],(unsigned char)recv_buffer[1]);		length=(unsigned char)recv_buffer[1]*256 +(unsigned char)recv_buffer[0];		retcode=Select_socket_status(sockfd);		//printf("third read Select_socket_status   ret_code=%d  length=%d    .....\n",retcode,length);               	if(retcode<0)               	{       			printf("Select_socket_status error  third  .... sockfd=%d\n",sockfd);                	continue;               	}  		ret_value=read(sockfd,ptr,length);		if(ret_value<=0)		{			printf("third recv sockfd = %d  ret_value is %d  close SOCKET \n",socketfd,ret_value);			close(socketfd);			break;		}		if((unsigned char)recv_buffer[ret_value-1]!=0x16)		{			printf("the END byte ERROR ,the message is ERROR ......\n");			continue;		}		if((unsigned char)recv_buffer[0]==1)		{			fill_dcepm_driverinfor(recv_buffer,length);		}		else if((unsigned char)recv_buffer[0]==2)		{			fill_dcepm_sysinfor(recv_buffer,length);		}		else if((unsigned char)recv_buffer[0]==3)		{			fill_dcepm_netinfor(recv_buffer,length);		}		else if((unsigned char)recv_buffer[0]==4)		{			fill_dcepm_pthreadinfor(recv_buffer,length);		}		else		{			printf("recv  other message  ------------   ERROR   -------------------\n");		}		sleep(1);	 }	 else if((unsigned char)recv_buffer[0]==0xfc)  //ask for moniparas from client	 {	 		int j,ret,send_num;	 		int tempint1,len_hostname;	 		char clientname[5];			int recnum=0;	 		retcode=Select_socket_status1(sockfd,0);      if(retcode<0)      {       				printf("Select_socket_status error\n");        continue;      }  			ret_value=read(sockfd,recv_buffer,1);	    len_hostname=recv_buffer[0];			ret_value=read(sockfd,recv_buffer,len_hostname);			strncpy(clientname,recv_buffer,len_hostname);			clientname[len_hostname]='\0';			printf("clientname is %s\n",clientname);						retcode=Select_socket_status1(sockfd,0);			if(retcode<0)      {       				printf("Select_socket_status error  second\n");        continue;      }  			ret_value=read(sockfd,recv_buffer,1);			if((unsigned char)recv_buffer[0]!=0x16)			{				printf("the end signal isn't valid!\n");				continue;					}				 			//get partition_name to be moni			recnum=oodbfind("Node_name",clientname,&tb_descr_Partitioninfo);			//printf("num of part to be moni is %d\n",recnum);			struct part_name *part_name_p;			struct PARTITIONINFO *partitioninfo_p;			part_name_p=(struct part_name*)malloc(sizeof(struct part_name)*recnum);			partitioninfo_p=(struct PARTITIONINFO*)malloc(sizeof(struct PARTITIONINFO)*recnum);			ret=oodbread_ra(partitioninfo_p,"Node_name",clientname,&tb_descr_Partitioninfo,sizeof(PARTITIONINFO)*recnum);			if(ret<0)			{				printf("oodbread fail!\n");				}			for(tempint1=0;tempint1<recnum;tempint1++)			{				strcpy((part_name_p+tempint1)->name,(partitioninfo_p+tempint1)->Part_name);				//printf("recv %s\n",(part_name_p+tempint1)->name);			}			send_buffer[0]=0xfc;			send_buffer[1]=recnum;			memcpy(&send_buffer[2],part_name_p,recnum*sizeof(struct part_name));			send_num=recnum*sizeof(struct part_name)+2;			retcode=Select_socket_status1(sockfd,1);			j=ptop_write_message(sockfd,send_buffer,send_num);			if(j<=0)			{				if((j==-2)||(j==-1))				{					close(sockfd);					free(part_name_p);					free(partitioninfo_p);					break;				}			}			free(part_name_p);			free(partitioninfo_p);			//get pthread_name to be moni***************************			recnum=oodbfind("Node_name",clientname,&tb_descr_Pthreadinfo);					//printf("num of proc to be moni is %d\n",recnum);			struct proc_name *proc_name_p;			struct PTHREADINFO *pthreadinfo_p;			proc_name_p=(struct proc_name*)malloc(sizeof(struct proc_name)*recnum);			pthreadinfo_p=(struct PTHREADINFO*)malloc(sizeof(struct PTHREADINFO)*recnum);			ret=oodbread_ra(pthreadinfo_p,"Node_name",clientname,&tb_descr_Pthreadinfo,sizeof(PTHREADINFO)*recnum);			for(tempint1=0;tempint1<recnum;tempint1++)			{				strcpy((proc_name_p+tempint1)->name,(pthreadinfo_p+tempint1)->Pthread_name);				//printf("recv %s\n",(proc_name_p+tempint1)->name);			}			send_buffer[0]=recnum;			memcpy(&send_buffer[1],proc_name_p,recnum*sizeof(struct proc_name));			send_num=recnum*sizeof(struct proc_name)+1;			j=ptop_write_message(sockfd,send_buffer,send_num);			if(j<=0)			{				if((j==-2)||(j==-1))				{					close(sockfd);					free(proc_name_p);					free(pthreadinfo_p);					break;				}			}			free(proc_name_p);			free(pthreadinfo_p);			//get net_name to be moni**********************			recnum=oodbfind("Node_name",clientname,&tb_descr_Netinfo);					//printf("num of net to be moni is %d\n",recnum);			struct net_name *net_name_p;			struct NETINFO *netinfo_p;			net_name_p=(struct net_name*)malloc(sizeof(struct net_name)*recnum);			netinfo_p=(struct NETINFO*)malloc(sizeof(struct NETINFO)*recnum);			ret=oodbread_ra(netinfo_p,"Node_name",clientname,&tb_descr_Netinfo,sizeof(NETINFO)*recnum);			for(tempint1=0;tempint1<recnum;tempint1++)			{				strcpy((net_name_p+tempint1)->name,(netinfo_p+tempint1)->Net_name);				//printf("recv %s\n",(net_name_p+tempint1)->name);			}			send_buffer[0]=recnum;			memcpy(&send_buffer[1],net_name_p,recnum*sizeof(struct net_name));			send_buffer[recnum*sizeof(struct net_name)+1]=0x16;			send_num=recnum*sizeof(struct net_name)+2;			j=ptop_write_message(sockfd,send_buffer,send_num);			if(j<=0)			{				if((j==-2)||(j==-1))				{					close(sockfd);					free(net_name_p);					free(netinfo_p);					break;				}			}			free(net_name_p);			free(netinfo_p);	 }	 else	 {	 		printf("the SYN error  recv char is %0.2x sockfd=%d !!!\n",(unsigned char)recv_buffer[0],sockfd);			continue;	 }	}	close(socketfd);	printf("RETURN  this pthread(sokefd == %d ) BYE   BYE !!!!!!!\n\n\n",sockfd);}int	fill_dcepm_driverinfor(char *ptr,int len){	char buffer[1024];	int	i,retcode,up_code,part_num_temp=0,ins_code;	bzero(buffer,1024);	memcpy(buffer,ptr,len);	PARTITIONINFO    dinfor;	struct PARTITIONMESSAGE 	*partitionmessage;	part_num_temp=buffer[1];	partitionmessage=(struct PARTITIONMESSAGE *)&buffer[2];	for(i=0;i<part_num_temp;i++)	{		retcode=oodbread_rk(&dinfor,partitionmessage->Id,&tb_descr_Partitioninfo,sizeof(PARTITIONINFO));		if(retcode <0)		{			printf("%s is not  in Partinfo table!",partitionmessage->Id );			continue;		}		dinfor.Part_size=partitionmessage->Part_size;		dinfor.Part_used=partitionmessage->Part_used;		//printf("recv:%s %d %f\n",partitionmessage->Id,partitionmessage->Part_size,partitionmessage->Part_used);		dinfor.Flag=0;		sem_wait(sem);		up_code=oodbupdate_rk(&dinfor,partitionmessage->Id,&tb_descr_Partitioninfo,sizeof(PARTITIONINFO));			sem_post(sem);		partitionmessage++;	 	}/////////////////////Update nodeinfo struct	for(i=0;i<node_num;i++)	{		if(!strcmp((nodeinfo_ptr+i)->Node_name,dinfor.Node_name))		{				(nodeinfo_ptr+i)->Node_ticks=0;				(nodeinfo_ptr+i)->Node_status=0;				break;		}	}	return(0);	}int	fill_dcepm_sysinfor(char *ptr,int len){	char buffer[1024];	int	retcode=-1,ins_code=-1,up_code=-1;	bzero(buffer,1024);	//printf("len=%d \n",len);	memcpy(buffer,ptr,len);	/*		for(int i=0;i<len;i++)	{		printf("%0.2x ",(unsigned char)buffer[i]);	}	printf("\n");	*/	SYSINFO	sysinfor;	SYSMESSAGE *sysmesage;	sysmesage=(SYSMESSAGE      *)&buffer[2];	//printf("sysmesage->Node_name=%s   ...............\n",sysmesage->Node_name);	if(Sysinfo_use_flag==1)	{		retcode=oodbread_rk(&sysinfor,sysmesage->Node_name,&tb_descr_Sysinfo,sizeof(SYSINFO));		//printf("oodbread_rk   retcode=%d  ............\n",retcode);		bzero(&sysinfor,sizeof(SYSINFO));		memcpy(sysinfor.Node_name,sysmesage->Node_name,10);		sysinfor.Cpu_used=sysmesage->Cpu_used;	    	sysinfor.Mem_used=sysmesage->Mem_used;	    	sysinfor.Mem_size=sysmesage->Mem_size;	    		  sem_wait(sem);		if(retcode <0)		{			ins_code=oodbinsert(&sysinfor,&tb_descr_Sysinfo,1,sizeof(SYSINFO));			//printf("insert ins_code  is %d   ...\n",ins_code);		}		else		{			up_code=oodbupdate_rk(&sysinfor,sysmesage->Node_name,&tb_descr_Sysinfo,sizeof(SYSINFO));			//printf("insert up_code  is %d   ...\n",up_code);		}				sem_post(sem);	}	return(0);}int	fill_dcepm_netinfor(char *ptr,int len){		char buffer[1024];	int net_num_temp=0;	int	retcode=-1,up_code=-1;	bzero(buffer,1024);	//printf("len=%d \n",len);	memcpy(buffer,ptr,len);	NETINFO		netinfor;	NETMESSAGE      *netmessage;	net_num_temp=buffer[1];	//printf("net_num_temp is %d\n",net_num_temp);	netmessage=(NETMESSAGE      *)&buffer[2];	for(int k=0;k<net_num_temp;k++)	{		retcode=oodbread_rk(&netinfor,netmessage->Id,&tb_descr_Netinfo,sizeof(NETINFO));		if(retcode <0)		{			printf("%s is not  in Netinfo table!",netmessage->Id );			continue;		}	 	memcpy(netinfor.Net_address,netmessage->Net_address,20);	 	//printf("netinfor.Net_address is %s\n",netinfor.Net_address);	 	netinfor.Net_speed=netmessage->Net_speed;	 	//printf("netinfor.speed is %d\n",netinfor.Net_speed);	 	netinfor.Flag=0;	 		 	sem_wait(sem);		up_code=oodbupdate_rk(&netinfor,netmessage->Id,&tb_descr_Netinfo,sizeof(NETINFO));			sem_post(sem);		//printf(" up_code  is %d   ...\n",up_code);		netmessage++;	 	}	return(0);}int	fill_dcepm_pthreadinfor(char *ptr,int len){	char buffer[1024];	int	retcode=-1,ins_code=-1,up_code=-1;	bzero(buffer,1024);	//printf("len=%d \n",len);	memcpy(buffer,ptr,len);	/*	for(int i=0;i<len;i++)	{		printf("%0.2x ",(unsigned char)buffer[i]);	}	printf("\n");	*/	PTHREADINFO	pthinfor;	PTHREADMESSAGE     *pthreadmessage;	pthreadmessage=(PTHREADMESSAGE     *)&buffer[2];	if(Pthreadinfo_use_flag==1)	{		int proc_num=len/(sizeof(PTHREADMESSAGE));		for(int i=0;i<proc_num;i++)		{			retcode=oodbread_rk(&pthinfor,pthreadmessage->Id,&tb_descr_Pthreadinfo,sizeof(PTHREADINFO));			//printf("oodbread_rk   retcode=%d  ............\n",retcode);			if(retcode <0)			{				printf("%s is not in Pthreadinfo table!\n",pthreadmessage->Id);				continue;			}				    pthinfor.Pthread_cpuload = pthreadmessage->Pthread_cpuload;	    pthinfor.Pthread_status=pthreadmessage->Pthread_status;			pthinfor.Pthread_memload=pthreadmessage->Pthread_memload;			pthinfor.Flag=0;						sem_wait(sem);			up_code=oodbupdate_rk(&pthinfor,pthreadmessage->Id,&tb_descr_Pthreadinfo,sizeof(PTHREADINFO));			sem_post(sem);			//printf("update  up_code  is %d   ...\n",up_code);			pthreadmessage++;		}	}	return(0);}

⌨️ 快捷键说明

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