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

📄 support.c

📁 linux下c 编写的 某项目代理服务端部分的代码。其中包括网络通信
💻 C
📖 第 1 页 / 共 2 页
字号:
        v_debug("\nPpacket.data=%s",Ppacket.data);        memset(execcode,0,CODESIZE+1);        if(strlen(Ppacket.data)<242)        {            if(strncmp(Ppacket.data,"0201",4)==0||strncmp(Ppacket.data,"0301",4)==0||strncmp(Ppacket.data,"0401",4)==0||               strncmp(Ppacket.data,"0501",4)==0||strncmp(Ppacket.data,"0601",4)==0||strncmp(Ppacket.data,"0701",4)==0||               strncmp(Ppacket.data,"0801",4)==0||strncmp(Ppacket.data,"0901",4)==0||strncmp(Ppacket.data,"1001",4)==0)            {               memcpy(&pktbuf,Ppacket.data,sizeof(Ppacket.data));               v_debug("pktbuf.heade.code=[%s]\n",pktbuf.header.code);                    memcpy(execcode,pktbuf.header.code,CODESIZE);           }           else           {               memcpy(pkt,Ppacket.data,PKTSTRULEN);               v_debug("pkt->header.code=[%s]\n",pkt->header.code);               v_debug("pkt->header.d_add=[%s]\n",pkt->header.d_add);               memcpy(execcode,pkt->header.code,CODESIZE);           }        }        else        {               memcpy(pkt,Ppacket.data,PKTSTRULEN);               v_debug("pkt->header.code=[%s]\n",pkt->header.code);               v_debug("pkt->header.d_add=[%s]\n",pkt->header.d_add);               memcpy(execcode,pkt->header.code,CODESIZE);        }        if (getobjname(execcode,execfile)<0){                syslog("file not found",__FILE__,__LINE__);                return -2;        }        strcpy(getexecfile,GetExecf(execfile));        sprintf(csock,"%d",sockid);        if(execl(getexecfile,execfile,csock,(char *)0)<0){                syslog("FILE NOT FOUND",__FILE__,__LINE__);                return -4;        }}int timeout=0;		intreadnet(const int sockid,register char *ptr,const short nbytes,	const short timval) {int nleft,nread;void catchalm();	signal(SIGALRM,catchalm);	nleft=nbytes;	while(nleft > 0) {		//set_alm(timval);		nread = read(sockid,ptr,nleft);		clearalm();		if (nread < 0 ) 			if (timeout){				close(sockid);				return (-200);			}			else				return (nleft);		else			if (nread==0)				break;		nleft -=nread;		ptr +=nread;	}	return nbytes-nleft;}int getobjname(char *code,char *file){	int num,count;	struct comshm *shmp;		num=0;	shmp=GetShm();	if (shmp==NULL)	syslog("get share memery fail",__FILE__,__LINE__);	count=shmp->expno;	while (num<count){	/*v_debug("getobjname code=[%s]\n",code);*/	if (strncmp(code,shmp->expstrulist[num].expcode,4)==0){		strcpy(file,shmp->expstrulist[num].expname);		/*v_debug("expname=[%s]\n",file);*/		return 0;		}		num++;	}	return -1;}		#define	Line	80#define EXECDIR	"/bin"char *GetExecf(const char * file){	char *path;	char *envp;	path=(char *)malloc(sizeof(char)*Line);	envp=getenv(WORKDIR);	if (envp==NULL){	return NULL;	}	memset(path,0,Line);	strcpy(path,envp);	strcat(path,EXECDIR);	strcat(path,"/");	strcat(path,file);	return path;}#define	BUFLEN	256int comrcv(char * sockid,char * buf){	int rdlen;	int sock;	if (sockid==NULL){		syslog("get sockid is NULL",__FILE__,__LINE__);		return -1;	}	sscanf(sockid,"%d",&sock);	rdlen=readnet(sock,buf,BUFLEN,TIMEVAL);	v_debug("comrcv buf =[%s]\nsockid=[%d]\nrdlen=[%d]",buf,sock,rdlen);	if (rdlen<0){		syslog("rcv data fail",__FILE__,__LINE__);		perror("rcv data fail");		close(sock);		return -1;	}}int GetPacketSeq(struct Packet *packet){	struct	pktstru pkt;	int	sequno;	memset(&pkt,0,sizeof(struct pktstru));	memcpy(&pkt,packet->data,PKTSTRULEN);	sequno=pkt.ctrmsg.sequence;	return sequno;		}int CheckPackEnd(struct Packet *packet){	struct pktstru pkt;	int	sequno;	memset(&pkt,0,sizeof(pkt));	memcpy(&pkt,packet->data,PKTSTRULEN);	if(pkt.ctrmsg.united==1)	    return 1;	else	    return 0;}int ChkMorePkt(struct Packet *packet){	struct pktstru pkt;	int	sequno;	memset(&pkt,0,sizeof(pkt));	memcpy(&pkt,packet->data,PKTSTRULEN);	if(pkt.ctrmsg.morepkt==1)	    return 1;	else	    return 0;	}int ComRcvPack(char * sockid,struct Packet * Rcvbuf){	int	sock;	int	sequno;	int	rdlen;	int	Morepkttag;	int	result;	struct Packet *tmp;	struct pktstru pkt;	tmp=(struct Packet*)malloc(sizeof(struct Packet));        tmp=Rcvbuf;	sequno=0;		v_debug("\nwhile outside circle");	do{		#ifdef TEST		v_debug("\nwhile circle");		#endif		if (sockid==NULL){			syslog("get sockid is NULL",__FILE__,__LINE__);			return -1;		}		sscanf(sockid,"%d",&sock);		if((result=readnet(sock,tmp->data,PKTSTRULEN,TIMEVAL))<0){			syslog("rcv pakcet data error",__FILE__,__LINE__);			close(sock);			return	-1;		}		sequno++;		memcpy(&pkt,tmp->data,PKTSTRULEN);		#ifdef TEST		v_debug("\npkt.ctrmsg.morepkt=[%d]",pkt.ctrmsg.morepkt);		v_debug("\npkt.ctrmsg.length=[%d]",pkt.ctrmsg.length);                v_debug("\npkt.ctrmsg.sequence=[%d]",pkt.ctrmsg.sequence);		v_debug("\npkt.header.d_add=[%s]",pkt.header.d_add);		v_debug("\npkt.header.code=[%s]",pkt.header.code);		v_debug("\npkt.data=[%s]",pkt.data);		#endif		pkt.ctrmsg.sequence=ntohs(pkt.ctrmsg.sequence);		memcpy(tmp->data,&pkt,PKTSTRULEN);		if(GetPacketSeq(tmp)!=sequno){			syslog("Lost first pakcet",__FILE__,__LINE__);			return-1;		}		if((result=CheckPackEnd(tmp))==1){			tmp->next=NULL;			Morepkttag=ChkMorePkt(tmp);		}		else{			tmp->next=(struct Packet*)malloc(sizeof(struct Packet));			tmp=tmp->next;		}	}while(!result);	return	Morepkttag;}void s_debug(va_alist)va_dcl{	va_list args;	char    *fmt;	FILE    *fp;	char filename[30], *ttyname(), *tname;	tname = ttyname(TRUE);	sprintf(filename, "%s/cscapp", getenv("TEMPDIR"));	fp = fopen(filename, "a");	va_start(args);	fmt = va_arg(args, char *);	vfprintf(fp, fmt, args);	va_end(args);	fclose(fp);}int writenet(const int sockid,register char *ptr,const short nbytes){int nleft,nwrite;        nleft=nbytes;        while(nleft > 0) {                nwrite = write(sockid,ptr,nleft);                if (nwrite < 0 )                {                     close(sockid);                     return (-200);                }                nleft -=nwrite;                ptr +=nwrite;        }        return nbytes-nleft;}int connsockid(unsigned int sport,unsigned long iadd){           s_debug("\nIN connsockid  !");     int sockfd;     struct sockaddr_in their_addr;     if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)     {          syslog("socket faill!",__FILE__,__LINE__);          perror("socket");         return(-1);     }     else           s_debug("\n socket succ !");             bzero(&their_addr,sizeof(their_addr));     their_addr.sin_family=AF_INET;     their_addr.sin_port=htons(sport);     their_addr.sin_addr.s_addr=iadd;     s_debug("\nipadd=%s",inet_ntoa(their_addr.sin_addr));     if(connect(sockfd,(struct sockaddr*)&their_addr,sizeof(struct sockaddr))==-1)     {        syslog("connect faill!",__FILE__,__LINE__);        perror("connect");        return(-2);     }     else        s_debug("\n connect succ !");     return sockfd;  }#define WRITELEN  256int comsnd(char * buf,unsigned int sndport,unsigned long ipadd){           s_debug("\nIN comsnd  !");                int rdlen;        int sock;        sock=connsockid(sndport,ipadd);        if (sock<0){                syslog("get sockid faill",__FILE__,__LINE__);                return -1;        }        else            s_debug("\nsock succ !");        rdlen=writenet(sock,buf,WRITELEN);        if (rdlen<0){                syslog("snd data fail",__FILE__,__LINE__);                close(sock);                return -1;        }        else           s_debug("\nwrit succ");        return 0;}int Getsndport_snd(char *buffs,char *buffs1){    s_debug("\nNow in Getsndport_snd!");    char jgbm[10];    char njgbm[10];    int i=0;    int code=0;    unsigned short addno;    unsigned int sndport;    unsigned long ipadd;    struct comshm * shmp;    memset(jgbm,0x0,sizeof(jgbm));    memset(njgbm,0x0,sizeof(njgbm));    shmp=GetShm();    addno=shmp->addno;        strncpy(jgbm,buffs1,9);        jgbm[9]='\0';        strncpy(njgbm,buffs1,4);    for(i=0;i<=addno;i++)    {        strcat(njgbm,shmp->addstrlist[i].jgbm);        njgbm[9]='\0';        if(strncmp(jgbm,njgbm,9)==0)        {             sndport=shmp->addstrlist[i].sndport;             ipadd=shmp->addstrlist[i].ipadd;             s_debug("\nsndport=%d",sndport);             s_debug("\nipadd=%ul",ipadd);                          if (comsnd(buffs,sndport,ipadd)<0)             {             v_debug("snd data fail");             s_debug("\nsnd data fail and buffs=[%s]",buffs);             code=-2;             break;             }             else             {              code=0;              break;             }        }        memset(njgbm,0x0,strlen(njgbm));        strncpy(njgbm,buffs1,4);            }    if(i>addno)          code=-1;    return code; }int trimstrcpy(char *des, char *src, int len){	int j;	if (len >= strlen(src))		j = strlen(src);	else		j = len;	strncpy(des,src,j);        des[j]='\0';	return 0;}voidcatchalm(){ 	syslog("conrcvdeal timeout ",NULL,0);	timeout=1;}clearalm(){	alarm(0);}/*set_alm(short  tt){	timeout =0;	alarm(tt);}*/

⌨️ 快捷键说明

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