comsocket_tool.cpp

来自「液晶电视完整代码可实现人机界面」· C++ 代码 · 共 680 行 · 第 1/2 页

CPP
680
字号
			if(nwrite <= 0) 				continue; 		} 		if(nwrite < 0) 		{ 			alarm(0); 			printf("Write error[%d,%s]\n",errno,strerror(errno));			return(nwrite); 		} 		printf("send len=[%d]", nwrite);		nleft -= nwrite; 		buff += nwrite; 	} 	alarm(0); 	return(BuffSize - nleft); } /***************************************************************************/ int PutFile_Cli(int SocketID,char *FileName,int block_size) { 	char buff[BUFF1024]; 	FILE * fd;	char send_flag[3],end_flag[3],lenbuff[10],send_buf[COMMAXBUFF],filecon[4+1]; 	long cd_flag,cd_buff,cd_sendbuff,c_bufflenlen,lLen; 	memset(send_flag,0x0,sizeof(send_flag));	memset(end_flag,0x0,sizeof(end_flag));	memset(lenbuff,0x0,sizeof(lenbuff));	memset(send_buf,0x0,sizeof(send_buf));	memset(filecon,0x0,sizeof(filecon));		sprintf(send_flag,"00");	sprintf(end_flag,"11");		if(access(FileName , 0) != 0)	{ 		printf("[%d,%s]\n",errno,strerror(errno));		return -1; 	}  	fd = fopen(FileName , "r"); 	if(fd == NULL)	{ 		printf("[%d,%s]\n",errno,strerror(errno));		return -1; 	}  	memset(buff,0,sizeof(block_size+1)); 	while(fgets(buff , BUFF1024, fd) != NULL) 	{ 		cd_flag = strlen(send_flag);		cd_buff = strlen(buff);		cd_sendbuff = cd_flag + cd_buff;		sprintf((char *)lenbuff , "%04d" , cd_sendbuff);		c_bufflenlen = strlen(lenbuff);		lLen = c_bufflenlen + cd_sendbuff;				memcpy(send_buf,lenbuff,c_bufflenlen);		memcpy(send_buf+c_bufflenlen, send_flag,cd_flag);		memcpy(send_buf+c_bufflenlen+cd_flag, buff,cd_buff);		printf("send_buf=[%s] lLen=[%d]\n",send_buf,lLen);		if(Write_Sock(SocketID , send_buf , lLen) != lLen)		{ 			printf("文件传送失败\n");			return (-1);		}		if(Read_Sock( SocketID,(char *)filecon, 4, SOCK_TIMEOUT ) != 4)		{ 			printf("服务段读客户段确认信息失败\n");			return (-1);		}			}	cd_flag = strlen(end_flag);	sprintf((char *)lenbuff , "%04d" , cd_flag);	c_bufflenlen = strlen(lenbuff);	strcpy(send_buf, lenbuff);	strcat(send_buf, end_flag);	lLen = c_bufflenlen + cd_flag;	printf("end send_buf=[%s] lLen=[%d]\n",send_buf,lLen);	if(Write_Sock(SocketID , send_buf , lLen) != lLen)	{		printf("写文件结束信息失败\n");		return (-1);	}	fclose(fd); 	return SUCCESS;   }	 /***************************************************************************/ int PutFile_Cli_as400(int SocketID,char *FileName,int block_size) { //	long trans_size; //	long FileLength;  	int cs_flag; //	struct stat filestat; 	char buff[BUFF1024]; 	int n;	FILE * fd;	char send_flag[3],end_flag[3],c_send_flag[3],c_end_flag[3],lenbuff[10],c_lenbuff[10],send_buf[COMMAXBUFF],c_buff[BUFF1024]; 	long cd_flag,cd_buff,cd_sendbuff,c_bufflenlen,lLen; 	memset(send_flag,0x0,sizeof(send_flag));	memset(c_send_flag,0x0,sizeof(c_send_flag));	memset(end_flag,0x0,sizeof(end_flag));	memset(c_end_flag,0x0,sizeof(c_end_flag));	memset(lenbuff,0x0,sizeof(lenbuff));	memset(c_lenbuff,0x0,sizeof(c_lenbuff));	memset(send_buf,0x0,sizeof(send_buf));	sprintf(send_flag,"00");	sprintf(end_flag,"11");	cs_flag = 0;		if(access(FileName , 0) != 0)	{ 		printf("[%d,%s]\n",errno,strerror(errno));		return -1; 	}  	fd = fopen(FileName , "r"); 	if(fd == NULL)	{ 		printf("[%d,%s]\n",errno,strerror(errno));		return -1; 	}  	memset(buff,0,sizeof(block_size+1)); 	while(fgets(buff , BUFF1024, fd) != NULL) 	{ 		printf("buff=[%s]\n",buff);		cd_flag = Str_A2E((unsigned char *)send_flag , 2, (unsigned char *)c_send_flag);		cd_flag = Str_A2E((unsigned char *)end_flag , 2, (unsigned char *)c_end_flag);		cd_buff = Str_A2E((unsigned char *)buff , strlen(buff)-1, (unsigned char *)c_buff);		cd_sendbuff = cd_flag + cd_buff;		sprintf((char *)lenbuff , "%04d" , cd_sendbuff);		c_bufflenlen = Str_A2E((unsigned char *)lenbuff , 4 , (unsigned char *)c_lenbuff);		lLen = c_bufflenlen + cd_sendbuff;				memcpy(send_buf,c_lenbuff,c_bufflenlen);		memcpy(send_buf+c_bufflenlen, c_send_flag,cd_flag);		memcpy(send_buf+c_bufflenlen+cd_flag, c_buff,cd_buff);		printf("send_buf=[%s] lLen=[%d]\n",send_buf,lLen);		if(Write_Sock(SocketID , send_buf , lLen) != lLen)		{ 			cs_flag = -1;			for(n=0;n<3;n++)			{				if(Write_Sock(SocketID , send_buf, lLen) == lLen)				{					cs_flag = 1;					break;				}			}		}		if(cs_flag<0)  //文件传输失败		{ 			fclose(fd); 			printf("文件传送失败\n");			return -1; 		}	}	cd_flag = Str_A2E((unsigned char *)end_flag , 2, (unsigned char *)c_end_flag);	sprintf((char *)lenbuff , "%04d" , cd_flag);	c_bufflenlen = Str_A2E((unsigned char *)lenbuff , 4 , (unsigned char *)c_lenbuff);	strcpy(send_buf, c_lenbuff);	strcat(send_buf, c_end_flag);	lLen = c_bufflenlen + cd_flag;	printf("end send_buf=[%s] lLen=[%d]\n",send_buf,lLen);	if(Write_Sock(SocketID , send_buf , lLen) != lLen)	{		printf("写文件结束信息失败\n");		return (-1);	}	fclose(fd); 	return SUCCESS;   }	 /***************************************************************************/ //int Sub_Tcp_S(char *str)//{//	char head[4][20];////	memset(head,'\0',sizeof(head));////	if((Sub_Str(str,3,head)) != 0)	return  -1;  //	strcpy(PORT,head[0]);	//	if(strcmp(head[1],"NULL") == 0)//		timeout = 60;//	else//		timeout = atoi(head[1]);//	if(strcmp(head[2],"NULL") == 0)//		err_log = 9;//	else//		err_log = atoi(head[2]);//	return 0;//}/****************************************************************************/ //int Server_Sock(const char * Service , const char * Transport , int qlen) //{ //	int sockfd;//	struct sockaddr_in local_addr;//      //	if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) //	{//		return -1;//	} //	//	bzero(&(local_addr), sizeof(local_addr)); //	local_addr.sin_family = AF_INET; //	local_addr.sin_addr.s_addr = htonl(INADDR_ANY);//	//	local_addr.sin_port = htons(atoi(Transport));   //	  //	if ( bind( sockfd, (struct sockaddr *)&local_addr, sizeof(local_addr))) //	{//		return 	-2;//	}////	if (listen(sockfd, 5) <0)//	{//		exit(1);//	}//	//	return sockfd;//} int Server_Sock( const char * Service , const char * Transport , int qlen ) { 	struct servent      *pse;          /* Server Information Pointer   */ 	struct protoent	    *ppe;	    /* Protocol Information Pointer */ 	int type; 	struct sockaddr_in  Sin;	int socket_id; 	bzero( ( char * ) &Sin , SockAddrLength ); 	Sin.sin_family      = AF_INET; 	Sin.sin_addr.s_addr = INADDR_ANY;   	/****** 1.Map service name to port number                      ******/ 	if( pse = getservbyname( Service , Transport ) )  		Sin.sin_port = htons( ntohs( (u_short)pse->s_port ) ); 	else 		if( ( Sin.sin_port=htons( (u_short)atoi(Service) ) )==0 )		{			printf("getservbyname [%s]\n",strerror(errno));			return -1;		} 	/****** 2.Map protocol name to protocol number                 ******/ 	if( (ppe = getprotobyname(Transport) ) == 0 )	{		printf("getprotobyname [%s]\n",strerror(errno));		return -1;	} 	/****** 3.Use protocol to choose a socket type                 ******/ 	if( strcmp(Transport,"udp") == 0 ) 		type = SOCK_DGRAM; 	else 		type = SOCK_STREAM;  	/****** 4.Create a socket                                       ******/ 	socket_id = socket( PF_INET , type , ppe->p_proto ); 	if( socket_id < 0 )	{		printf("socket [%s]\n",strerror(errno));		return -1;	}	 	/****** 5.Bind socket to location address                        ******/ 	if( ( bind (socket_id,(struct sockaddr *)&Sin,SockAddrLength) )<0 )	{		printf("bind [%s]\n",strerror(errno));		return -1;	}	 	/****** 6.The number of this socket stream quence is MAX_LISTS   ******/ 	if( type == SOCK_STREAM && listen(socket_id,qlen) < 0 )	{		printf("listen [%s]\n",strerror(errno));		return -1;	} 	return socket_id; } /****************************************************************************/ int Set_Sock_Att(int socket_id){	int     on=1; 	struct  linger Linger; 	Linger.l_onoff = 1; 	Linger.l_linger = 0; 	if (setsockopt(socket_id,SOL_SOCKET,SO_LINGER,(char *)&Linger,sizeof(Linger)) != 0) 	{ 		close(socket_id); 		return -1; 	} 	on = 1; 	if (setsockopt(socket_id,SOL_SOCKET,SO_OOBINLINE,		(char *)&on,sizeof(on))) { 		close(socket_id); 		return -1; 	} 	on = 1; 	if (setsockopt(socket_id, IPPROTO_TCP, TCP_NODELAY, 		(char *)&on, sizeof(on))) { 		close(socket_id); 		return -1; 	}  	on = 1; 	if (setsockopt(socket_id, SOL_SOCKET, SO_KEEPALIVE, 		(char *)&on, sizeof(on))) { 		close(socket_id); 		return -1; 	} 	on = 1; 	if (setsockopt(socket_id, SOL_SOCKET, SO_REUSEPORT, 		(char *)&on, sizeof(on))) { 		close(socket_id); 		return -1; 	} 	on = 1; 	if (setsockopt(socket_id, SOL_SOCKET, SO_REUSEADDR, 		(char *)&on, sizeof(on))) { 		close(socket_id); 		return -1; 	}		return 0;}/***************************************************************************/ 

⌨️ 快捷键说明

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