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

📄 test.c

📁 IEC104程序元源代码
💻 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 + -