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 + -
显示快捷键?