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

📄 com_lzser.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
字号:
//------------------------------------------------------------------- //文件名:ComSocket_lzSer.cpp//创建人:陈熹//日  期:2002-10-21//修改人://日  期://描  述:通讯模块(来帐发送的服务端模式)//版  本://Copyright (c) 2002  EITOP//------------------------------------------------------------------- #include "Com_lzser.h"//------------------------------------------------------------------- //函数名:	ComSocket_lzSer//功能描述:	构造函数//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- ComSocket_lzSer::ComSocket_lzSer(void){	char tmpbuf[1+1];	socket_id = -1;	msocket_id = -1;	connfd = -1;		memset( PORT, 0x0, sizeof(PORT));	memset( tmpbuf, 0x0, sizeof(tmpbuf));	memset( Mac_IP, 0x0, sizeof(Mac_IP));		ComFunction::GetConcreteClassOnePameterValue("ComSocket_lzSer", "port", PORT);	ComFunction::GetConcreteClassOnePameterValue("ComSocket_lzSer", "machine", Mac_IP);	ComFunction::GetConcreteClassOnePameterValue("ComSocket_lzSer", "logleval", tmpbuf);	err_log = atoi(tmpbuf);}//------------------------------------------------------------------- //函数名:	~ComSocket_lzSer//功能描述:	析构函数//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- ComSocket_lzSer::~ComSocket_lzSer(){}//------------------------------------------------------------------- //函数名:	ComSocket_lzSer::Open()//功能描述:	打开通讯端口//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- int ComSocket_lzSer::Open(){	printf("开始打开服务端口[%s]\n", PORT); 	socket_id = Server_Sock( PORT , "tcp" , MAXLIST );            	if(socket_id < 1 ) 	{		printf("创建SOCKET 套接口失败\n");		return  -1; 	} 	printf("设置SOCKET 套接口的属性\n");						if( Set_Sock_Att(socket_id) <= -1 )	{		printf("设置SOCKET 套接口的属性失败\n");		return -1;	}	return 0;}//------------------------------------------------------------------- //函数名:	ComSocket_lzSer::Service()//功能描述:	开始服务//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- int ComSocket_lzSer::Service(){	int           nsel,maxfd;	size_t        clilen;	fd_set	      rset,mset;	char          ipaddress[20];	struct        sockaddr_in  Sin;		FD_ZERO(&mset);	FD_SET(socket_id, &mset);	maxfd = socket_id;		rset = mset;	memset( ipaddress, 0x0, sizeof(ipaddress));	if( msocket_id==-1 )	{			printf("Begin accept..............\n");				nsel = select(maxfd+1, &rset, NULL, NULL, NULL);		if ( FD_ISSET(socket_id, &rset) && nsel>=0 ) 		{			clilen = SockAddrLength;			if( (connfd = accept(socket_id, (struct sockaddr *)&Sin, &clilen)) <0 )			{				if ((errno == EWOULDBLOCK) || 				    (errno ==ECONNABORTED) || 				    (errno == EPROTO) || 				    (errno == ENOSR) || 				    (errno == EINTR) )				{					sleep(3);					return 9;				}				else				{					printf("accept error=[%d]\n",errno);					return -1;				}			}			msocket_id = connfd;			sprintf( ipaddress, inet_ntoa(Sin.sin_addr));			printf("ipaddress=[%s]\n",ipaddress);			if( err_log==7 )				LogPro(__FILE__,__LINE__,1,"ipaddress=[%s]\n",ipaddress);			if ( strcmp( ipaddress, Mac_IP))			{								printf("接收的IP地址是非法配置地址或者是合法主机的二次连接\n");				if( err_log==7||err_log==1 )					LogPro(__FILE__,__LINE__,1,"接收的IP地址是非法配置地址或者是合法主机的二次连接\n");				return 0;			}			printf("==========in accept fun=============\n");			printf("ipaddress=[%s]\n",ipaddress);			printf("Mac_IP=[%s]\n",Mac_IP);			printf("==========in accept fun=============\n");		}	}	    else    {        return -1;    }	return 0;}//------------------------------------------------------------------- //函数名:	ComSocket_lzSer::Recv(char** RecvBuffer, int* RecvBufferLen, int* RetCode, char** RetMsg)//功能描述:	接收数据函数//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- int ComSocket_lzSer::Recv(char* RecvBuffer, int* RecvBufferLen, int* RetCode, char* RetMsg){	long i_bufflen;	char buff[COMMAXBUFF];	char lenbuff[10];	char transhead[HEADLEN+1];		memset(buff, 0x0, sizeof(buff));	memset(transhead, 0x0, sizeof(transhead));	memset(lenbuff, 0x0, sizeof(lenbuff));			if( Read_Sock(connfd,(char *)lenbuff,6,SOCK_TIMEOUT) != 6 )	{		*RetCode = 105;		sprintf(RetMsg, "Recv error(Read head error)");		if( err_log==7||err_log==1 )			LogPro(__FILE__,__LINE__,1,"Recv error(Read head error)\n");		close(connfd);		msocket_id = -1;		return (-1);	}	i_bufflen = atol((const char *)lenbuff);	if( Read_Sock( connfd,(char *)buff,i_bufflen,SOCK_TIMEOUT ) != i_bufflen )	{		*RetCode=104;		sprintf(RetMsg,"Send error(Client read data error)");		printf("read buff error\n");		if( err_log==7||err_log==1 )			LogPro(__FILE__,__LINE__,1,"Send error(Client read data error)\n");		close(connfd);		msocket_id = -1;		return -1;	}	*RecvBufferLen = i_bufflen;//-HEADLEN;	//memcpy( transhead,(char *)buff,HEADLEN );  //取出头信息	memcpy( RecvBuffer,(char *)buff,/*+HEADLEN,*/*RecvBufferLen );  //取出buff信息	printf("RecvBuffer=[%s]\n",*RecvBuffer);		*RetCode = atoi(RecvBuffer);	sprintf(RetMsg,"Call Recv Success");	    	int Res = Write_Sock( connfd , "000006000000", 12);  	if( Res != 12 )	{  		printf("send confirm error\n");		*RetCode=104;		sprintf(RetMsg,"Send error write data error)");		close(connfd);		msocket_id = -1;		return -1;  	}  	return 0;}//------------------------------------------------------------------- //函数名:	ComSocket_lzSer::Send(char* SendBuffer, int Sendbufferlen, int* RetCode, char** RetMsg)//功能描述:	发送数据函数//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- int ComSocket_lzSer::Send(char* SendBuffer, int fileflag ,int Sendbufferlen, int* RetCode, char* RetMsg){	int	Res,macbz;	char  filepath[50];	char	fn[FILEPATHLEN],pt[FILEPATHLEN];  	struct stat st;  	long c_bufflen;	long lLen;	char c_buff[COMMAXBUFF];	char lenbuff[10];	char tmp_buf[5];	char tmp_transhead[HEADLEN+1];	char ipaddress[20];	char cmtno[3+1];	char filecon[4+1];	TRANSHEAD   transhead;	memset( ipaddress, 0, sizeof(ipaddress));	memset( filepath, 0, sizeof(filepath));	memset( cmtno, 0, sizeof(cmtno));			memset( fn , 0 , sizeof(fn) );	memset( pt , 0 , sizeof(pt) );	memset( c_buff , 0 , sizeof(c_buff) );	memset( filecon , 0 , sizeof(filecon) );	memset( tmp_buf , 0 , sizeof(tmp_buf) );	memset( lenbuff , 0 , sizeof(lenbuff) );	memset( tmp_transhead , 0 , sizeof(tmp_transhead) );	//构造传送报文信息	memset( (char *) &transhead , 0 , HEADLEN );	memset( (char *) &transhead , ' ' , HEADLEN-1 );	transhead.Command_Type = '1';  	fileflag = 0;    /*	memcpy( cmtno, SendBuffer, 3 );	if ( strncmp( cmtno, "689", 3)==0 )	{		fileflag = 1;		sprintf( filepath, "%s/file/detail.dat", getenv("WORKDIR"));	}	else if ( strncmp( cmtno, "417", 3)==0 )	{		fileflag = 1;		sprintf( filepath, "%s/file/bankno.dat", getenv("WORKDIR"));	}	if( fileflag == 1 ) 	{		memset( &st , 0 , sizeof(struct stat) );  		stat( filepath , &st );  		SepPathName( filepath , pt , fn );   		transhead.TransFile = '1';  		sprintf(transhead.FileLength,"%10d",st.st_size);		sprintf( transhead.FileName,"%-100s" , fn ); 		sprintf(transhead.Response,"%10s",' ');		sprintf(transhead.Message,"%100s",' ');		sprintf( transhead.TransLength , "%10d" , 0 );	} 	*/	transhead.compressed = '0';	printf("Begin Send\n");	c_bufflen = /*HEADLEN +*/ Sendbufferlen;	sprintf( (char *)lenbuff , "%06d" , c_bufflen);	strcpy( (char *) c_buff , (char *) lenbuff );	//strncpy( tmp_transhead, (const char *)&transhead, HEADLEN );	//strcat( (char *) c_buff , (char *)tmp_transhead );	strcat( (char *) c_buff , (char *)SendBuffer );	lLen = strlen(c_buff);    printf("c_buff=[%s]\n",c_buff);	Res = Write_Sock( connfd , c_buff, lLen );  	if( Res != lLen )	{  		printf("W_data error\n");		*RetCode=104;		sprintf(RetMsg,"Send error(Client write data error)");		close(connfd);		msocket_id = -1;		return -1;  	}      	int readLen = 0;	if( (readLen = Read_Sock( connfd,tmp_buf,12,SOCK_TIMEOUT )) != 12 )	{		printf("read confirm error and readLen=[%d], socket=[%d]\n", readLen, connfd);		//return 0;			}	printf("End Send data\n");	*RetCode=0;	sprintf(RetMsg,"Send success!");	return 0;}//------------------------------------------------------------------- //函数名:	ComSocket_lzSer::Reset()//功能描述:	通讯类状态重置//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- int ComSocket_lzSer::Reset(){	socket_id = -1;	msocket_id = -1;	connfd = -1;	return 0;}//------------------------------------------------------------------- //函数名:	ComSocket_lzSer::Close()//功能描述:	关闭通讯端口//作   者:	陈熹//日   期:	2002-10-21//输   入:  //修   改://日   期://版   本://------------------------------------------------------------------- int ComSocket_lzSer::Close(){	close(connfd);	return 0;}

⌨️ 快捷键说明

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