📄 test.c
字号:
/* dlserver.c 4.2 04/15/99 *********************************************************************** * NARI Software * * Automatic Realtime Remote Interface software * * Copyright (c) 1998,1999 NARI P.R.C * * All Rights Reserved * * * * * * Name : dlserver.c * * * * Programmer : NARI * * * * Decsription : the server process of net104 protocol * * * ***********************************************************************/#include "104def.h"#include "ipdef.h"void alarm_handler();char hostname[NAME_SIZE];char myprocessname[NAME_SIZE];char mynodename[NAME_SIZE];int MyByteOrder;struct { unsigned char len; unsigned char buf[256];}send_buf;int com_state=0;int sock_fd,lansock,display; struct sockaddr_in sockaddr,from,from1;int ii,llen=0; unsigned char bbuf[256];int display;void main(argc,argv)int argc;char *argv[];{ int pid,w_code,code; pid_t pidd; int *stat,rtn,tmpxx; int i,j,length,k; stat=&tmpxx; init_sighandler(); if(argc==2&&strcmp(argv[1],"on")==0)display=1; else display=0; sockaddr.sin_addr.s_addr = INADDR_ANY; sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(SOCKET_PORT_NO); sock_fd=socket(AF_INET,SOCK_STREAM,0); length=sizeof(sockaddr); k=0; while(1){ sockaddr.sin_addr.s_addr = inet_addr(ipdef[k].net_node_name); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(SOCKET_PORT_NO); sock_fd=socket(AF_INET,SOCK_STREAM,0); length=sizeof(sockaddr); signal( SIGALRM,alarm_handler ); alarm( 2 ); code = connect(sock_fd,(struct sockaddr *)&(sockaddr),length); alarm (0); signal (SIGALRM, SIG_IGN); if(code){ printf("connect fail[%s]!\n",ipdef[k].net_node_name); if(strcmp(ipdef[k].net_node_name,"")){ k++; if(!strcmp(ipdef[k].net_node_name,""))k=0; }else k=0; close(sock_fd); shutdown(sock_fd,2); sleep(2); continue; } com_state=1;printf("connect sucess\n"); rLink(); pid=fork(); if(pid==0)rMaster(); else if(pid==-1)printf("fork err\n"); else { signal(SIGALRM,alarm_handler); alarm(1); rtn=wait(0); alarm(0); signal(SIGALRM,alarm_handler); for(;;){ w_code=waitpid(pidd,stat,WNOHANG); if(w_code<1)break; } while(1){ rcv_proc(); ms_sleep(10); if(com_state==0)break; }printf("exit!\n"); } close(sock_fd); sleep(2); }}rMaster(){ int menu_no,len,i; unsigned char buf[255]; while(1){ printf("input menu:"); scanf("%d",&menu_no); if(menu_no==0||menu_no>20)exit(0); printf("input len:"); scanf("%d",&len); printf("input data(%d):",len); for(i=0;i<len;i++){ scanf("%d",&buf[i]); if(com_state==0)break; } send(sock_fd,(char *)buf,len,0 ); for(i=0;i<len;i++)printf("%3x",buf[i]); printf("\n"); if(com_state==0)break; } exit(0);}rLink(){ unsigned char i,buf[255]; buf[0]=0x68; buf[1]=0x04; buf[2]=0x0b; buf[3]=0x0; buf[4]=0x0; buf[5]=0x0; send(sock_fd,(char *)buf,6,0 );printf("s%02d-"); for(i=0;i<6;i++)printf("%3x",buf[i]); printf("\n");}rTestAck(){ unsigned char i,buf[255]; buf[0] = 0x68; buf[1] = 0x04; buf[2] = 0x83; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; send(sock_fd,(char *)buf,6,0 );printf("s%02d-"); for(i=0;i<6;i++)printf("%3x",buf[i]); printf("\n");}rcv_proc(){ int i, rec_count,length,status; unsigned char ptr[1024]; fd_set fdR; struct timeval timeout; do{ FD_ZERO( &fdR ); FD_SET( sock_fd,&fdR ); timeout.tv_usec = 100; /* 100 ms */ timeout.tv_sec = 0; signal(SIGALRM,alarm_handler); alarm( 1 ); status = select( sock_fd+1,&fdR,NULL,NULL,&timeout ); alarm(0); signal(SIGALRM,SIG_DFL); if( status < 0 ){ printf("Err---104recv select %d(%d)\n", status,errno); return; } if( status==0 || FD_ISSET(sock_fd,&fdR) == 0 ) return; signal(SIGALRM,alarm_handler); alarm(1); rec_count = recv(sock_fd,(char *)&ptr[0],2,0 ); alarm(0); signal(SIGALRM,SIG_DFL); if( rec_count != 2 || ptr[0] != 0x68 ){ if( errno != EINTR && errno != EWOULDBLOCK ) com_state = 0; return; } length = ptr[1]; signal(SIGALRM,alarm_handler); alarm(1); rec_count = recv(sock_fd,(char *)&ptr[2],length,0 ); alarm(0); signal(SIGALRM,SIG_DFL); if( rec_count != length ){ if( errno != EINTR && errno != EWOULDBLOCK ) com_state = 0; return; } if(length==4 &&ptr[2]==0x43){ rTestAck(); } if(length>0&&display){ display_on(ptr,length+2,0); } }while(length>0&&errno==0); return;}void alarm_handler(){}display_on( ptr,k,flag )unsigned char ptr[];int k,flag;{ int i; if( flag == 0 ) printf("r%02d-",DD_NO); else printf("s%02d-",DD_NO); if(k==6){ if((ptr[2]&0x03)==0x01){ printf("RECV_NUM_ACK:"); } else if((ptr[2]&0x03)==0x03){ switch(ptr[2]){ case 0x04|0x03: printf("STARTDT_ACT: ");break; case 0x08|0x03: printf("STARTDT_ACK: ");break; case 0x10|0x03: printf("STOPDT_ACT: "); break; case 0x20|0x03: printf("STOPDT_ACK: "); break; case 0x40|0x03: printf("TESTFP_ACT: "); break; case 0x80|0x03: printf("TESTFP_ACK: "); break; default: printf("???????: ");break; } } }else{ switch(ptr[6]) { case M_SP_NA: printf("M_SP_NA: ");break; case M_DP_NA: printf("M_DP_NA: ");break; case M_ST_NA: printf("M_ST_NA: ");break; case M_BO_NA: printf("M_BO_NA: ");break; case M_ME_NA: printf("M_ME_NA: ");break; case M_ME_NB: printf("M_ME_NB: ");break; case M_ME_NC: printf("M_ME_NC: ");break; case M_IT_NA: printf("M_IT_NA: ");break; case M_PS_NA: printf("M_PS_NA: ");break; case M_ME_ND: printf("M_ME_ND: ");break; case M_SP_TB: printf("M_SP_TB: ");break; case M_DP_TB: printf("M_DP_TB: ");break; case M_ST_TB: printf("M_ST_TB: ");break; case M_BO_TB: printf("M_BO_TB: ");break; case M_ME_TD: printf("M_ME_TD: ");break; case M_ME_TE: printf("M_ME_TE: ");break; case M_ME_TF: printf("M_ME_TF: ");break; case M_IT_TB: printf("M_IT_TB: ");break; case M_EP_TD: printf("M_EP_TD: ");break; case M_EP_TE: printf("M_EP_TE: ");break; case M_EP_TF: printf("M_EP_TF: ");break; case M_EI_NA: printf("M_EI_NA: ");break; case C_SC_NA: printf("C_SC_NA: ");break; case C_SE_NA: printf("C_SE_NA: ");break; case C_IC_NA: printf("C_IC_NA: ");break; default: printf("???????: ");break; } } for( i=0;i<k;i++ ){ printf("%2x ",ptr[i]); if( (((i+1) % MaxListDsp)==0) && (i!=k-1) ) printf("\n "); } printf("\n");}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -