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

📄 com_wzser.cpp

📁 液晶电视完整代码可实现人机界面
💻 CPP
字号:
//------------------------------------------------------------------- //文件名:ComSocket_wzSer.cpp//创建人:陈熹//日  期:2002-10-21//修改人://日  期://描  述:AS400通讯模块(服务端)//版  本://Copyright (c) 2002  EITOP//------------------------------------------------------------------- #include "Com_wzser.h"/////////////////////////////////////////////////////////////////////////////////	构造函数ComSocket_wzSer::ComSocket_wzSer(){	char tmpbuf[1+1];	socket_id = -1;	msocket_id = -1;	connfd = -1;		memset(PORT, 0x0, sizeof(PORT));	memset(tmpbuf, 0x0, sizeof(tmpbuf));		ComFunction::GetConcreteClassOnePameterValue("ComSocket_wzSer", "port", PORT);	ComFunction::GetConcreteClassOnePameterValue("ComSocket_wzSer", "logleval", tmpbuf);	err_log = atoi(tmpbuf);}/////////////////////////////////////////////////////////////////////////////////析构函数ComSocket_wzSer::~ComSocket_wzSer(){}/////////////////////////////////////////////////////////////////////////////////打开通讯端口int ComSocket_wzSer::Open(){	//申请新的Sock结束	if( socket_id == -1 )	{		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;}/////////////////////////////////////////////////////////////////////////////////开始服务int ComSocket_wzSer::Service(){	int           nsel,maxfd;	size_t        clilen;	fd_set	      rset,mset;	struct        sockaddr_in  Sin;	char *ipAddres = NULL;	FD_ZERO(&mset);	FD_SET(socket_id, &mset);	maxfd = socket_id;		rset = mset;	printf("ComSocket_wzSer通讯程序处于select状态\n");		if( msocket_id == -1 )	{		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) || //Software caused connection abort				   (errno == EPROTO)       || //Protocol error 				   (errno == ENOSR)        || //out of streams resources				   (errno == EINTR))          //interrupted system call				{					return 9;				}				else				{					printf("accept error=[%d]\n",errno);					if( err_log==7||err_log==1 )						LogPro(__FILE__,__LINE__,1,"accept error=[%d]\n",errno);					return (-1);				}			}			msocket_id = connfd;			memset(clientIp, 0, 16);			ipAddres = new char[16];			memset(ipAddres, 0, 16);			ipAddres = inet_ntoa(Sin.sin_addr);			memcpy(clientIp, ipAddres, strlen(ipAddres));			delete [] ipAddres;			printf("Accept client socket=[%d] IP=[%s]\n", msocket_id, clientIp);			return 0;		}	}		return -1;}/////////////////////////////////////////////////////////////////////////////////接收数据函数int ComSocket_wzSer::Recv(char* RecvBuffer, int& RecvBufferLen, int& RetCode, char* RetMsg){	int       Res;	long i_bufflen;	unsigned char buff[COMMAXBUFF];	unsigned char lenbuff[10];	memset( buff, 0x0, sizeof(buff));	memset( lenbuff, 0x0, sizeof(lenbuff));	//先收取4个字节的长度	if((Res = Recvmbbuf(connfd, (char *)lenbuff, 6, SOCK_TIMEOUT) ) != 6 )	{		if( Res == TIMEOUTERRNO ) 		{			//printf("R_head timeout\n");			//close (connfd);			//msocket_id = -1;			return TIMEOUTERRNO;		}		if( Res == -2 ) 		{			printf("Client_Socket disconnect\n");			close (connfd);			msocket_id = -1;			return -2;		}		//sco:9-Bad file number,13-Permission denied		//aix:31-such file or directory,17-File exists		if( errno == 13 || errno == 9 || errno == 31 ||errno ==17 ) 		{			printf("read errmsg=[%s]\n",strerror(errno));					close (connfd);			msocket_id = -1;			return -2;		}		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(i_bufflen <= 10)	{		printf("Error receive invalid message reason len=[%d] too short\n", i_bufflen);		if( err_log==7||err_log==1 )		LogPro(__FILE__,__LINE__,1,"Error receive invalid message reason "			"len=[%d] too short\n", i_bufflen);		return 2;	}	printf("RecvBufferLen=[%d]\n", i_bufflen);	int recdLen = 0;	if((recdLen=Recvmbbuf(connfd,(char *)buff, i_bufflen, SOCK_TIMEOUT )) != i_bufflen )	{		//printf("recved leng:%d\n", recdLen);		RetCode = 104;		sprintf(RetMsg,"Read error(read Client data error)");		printf("read buff error\n");		//if( err_log==7||err_log==1 )		//	LogPro(__FILE__,__LINE__,1,"Read error(read Client data error)\n");		//close (connfd);		//msocket_id = -1;		return TIMEOUTERRNO;	}		//memcpy( RecvBuffer,(char *)buff, i_bufflen );  	strcpy(RecvBuffer, (char *)buff);	RecvBufferLen = i_bufflen;		RetCode = 0;	//printf("recd:%s", RecvBuffer);		sprintf(RetMsg,"信息收取成功");		return 0;}/////////////////////////////////////////////////////////////////////////////////发送数据函数int ComSocket_wzSer::Send(char* SendBuffer, char* Sendmsg, int Sendbufferlen, int* RetCode, char** RetMsg){		char tmp_buf[5];	unsigned char c_buff[COMMAXBUFF];	unsigned char lenbuff[10];	long i_bufflen;	memset( tmp_buf,'\0',sizeof(tmp_buf) );		memset( c_buff,'\0',sizeof(c_buff) );		memset( lenbuff,'\0',sizeof(lenbuff) );		if(strlen(SendBuffer)<=0)	{    	int len = strlen(Sendmsg);    	sprintf( (char *)lenbuff , "%06d" , (len));    	memcpy((char *)c_buff, lenbuff, 6);    	memcpy((char *)(c_buff+6), Sendmsg, len);    	i_bufflen = strlen((char *)c_buff);	}    else    {        int len = strlen(SendBuffer);        sprintf( (char *)lenbuff , "%06d" , (len));        memcpy((char *)c_buff, lenbuff, 6);        memcpy((char *)(c_buff+6), SendBuffer, len);        i_bufflen = strlen((char *)c_buff);    }    	if( Write_Sock( connfd,(char *)c_buff,i_bufflen ) != i_bufflen ) 	{ 		printf("write buff error\n");		if( err_log==7||err_log==1 )			LogPro(__FILE__,__LINE__,1,"write buff error\n");		//close (connfd);		//msocket_id = -1;		return (-1); 	} 	printf("Send buffer=[%d][%s]", i_bufflen, c_buff);	//int readLen = 0;	//if( (readLen = Read_Sock( connfd,tmp_buf,4,SOCK_TIMEOUT )) != 4 )	//{	//	printf("read confirm error and readLen=[%d], socket=[%d]\n", readLen, connfd);	//	return 0;			//}	//printf("Call Rrecv end\n");		return 0;}/////////////////////////////////////////////////////////////////////////////////发送心跳消息int ComSocket_wzSer::SentHeartMsg(char* HeartMsg){	int len = strlen(HeartMsg); 	char strComfirm[5];	memset(strComfirm, 0, 5);		if( Write_Sock( connfd,(char *)HeartMsg, len) != len ) 	{ 		printf("write HeartMsg to Socket error\n");		if( err_log==7||err_log==1 )			LogPro(__FILE__,__LINE__,1,"write HeartMsg to Socket error\n");		close (connfd);		msocket_id = -1;		return (-1); 	} 		//if( Read_Sock( connfd, strComfirm, 4, SOCK_TIMEOUT ) != 4 )	//{	//	printf("read confirm timeout\n");	//	return -1;			//}		return 0;}/////////////////////////////////////////////////////////////////////////////////	通讯类状态重置int ComSocket_wzSer::Reset(){	socket_id = -1;	msocket_id = -1;	connfd = -1;		return 0;}/////////////////////////////////////////////////////////////////////////////////关闭通讯端口int ComSocket_wzSer::Close(){//	close(msocket_id);//	close(socket_id);	close(connfd);	connfd = -1;	return 0;}//////////////////////////////////////////////////////////////////////////////////停止指定的套接字int ComSocket_wzSer::Close(int socket){	close(socket);	return 0;}

⌨️ 快捷键说明

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