📄 ibmsgateway.c
字号:
} printf("the local server socket(fd=%d) is now listening...\n",localserver_fd); //creat the udp socket udp_fd=socket(AF_INET,SOCK_DGRAM,0); if (udp_fd==-1) { printf("create device message socket error.\n"); exit(1); } fcntl(udp_fd,F_SETFL,O_NONBLOCK); bzero(&udp_addr,sizeof(udp_addr)); udp_addr.sin_family=AF_INET; udp_addr.sin_port=htons(atoi(deviceport)); inet_aton(read_net.serverip,&udp_addr.sin_addr); printf("the udp socket(fd=%d) is now already...\n",udp_fd); //open comm port com_fd=opencommport("/dev/ttyS1",read_com); printf("the serial comport(fd=%d) is now already...\n",com_fd); if (com_fd>max_fd) max_fd=com_fd; FD_ZERO(&readfds); FD_SET(localserver_fd,&readfds); FD_SET(com_fd,&readfds); sendbuff=(char *)malloc(sizeof(char)*6); while (1) { sleep(1); if (isdigital==1) { strcpy(sendbuff,"$016\r"); } if (isdigital==0) { strcpy(sendbuff,"#030\r"); } isdigital=!isdigital; write(com_fd,sendbuff,5); select(max_fd+1,&readfds,NULL,NULL,NULL); if (FD_ISSET(com_fd,&readfds)) { FD_SET(localserver_fd,&readfds); FD_SET(com_fd,&readfds); numbytes=read(com_fd,recvbuff,sizeof(recvbuff)); for (i=0;i<numbytes;i++) printf("%d ",recvbuff[i]); printf("\n"); t=time(NULL); gt=localtime(&t); sprintf(str_t,"%d-%d-%d %d:%d:%d",(*gt).tm_year+1900,(*gt).tm_mon+1,(*gt).tm_mday,(*gt).tm_hour,(*gt).tm_min,(*gt).tm_sec); if ((numbytes==8) && (recvbuff[0]=='!') && (recvbuff[7]=='\r')) { strncpy(mytmp,recvbuff+1,4); mytmp[4]='\0'; strcpy(processdata,""); strcatall(processdata,"0x",mytmp,NULL); // printf("%s\n",processdata); mytmpd=strtol(processdata,NULL,0); if (FindDeviceNo(point,pointnumber,"06.1",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0001)==0x0001) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.1",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.2",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0002)==0x0002) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.2",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.3",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0004)==0x0004) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.3",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.4",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0008)==0x0008) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.4",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.5",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0010)==0x0010) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.5",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.6",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0020)==0x0020) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.6",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.7",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0040)==0x0040) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.7",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.8",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0080)==0x0080) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.8",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.9",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0100)==0x0100) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.9",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.10",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0200)==0x0200) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.10",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.11",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0400)==0x0400) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.11",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.12",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x0800)==0x0800) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.12",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.13",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x1000)==0x1000) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.13",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.14",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x2000)==0x2000) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.14",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.15",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x4000)==0x4000) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.15",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } if (FindDeviceNo(point,pointnumber,"06.16",deviceno)==1) { strcpy(strbuf,""); if ((mytmpd & 0x8000)==0x8000) strcpy(s,"1"); else strcpy(s,"0"); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"06.16",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } } if ((numbytes==9) && (recvbuff[0]=='>') && (recvbuff[8]=='\r')) { if (FindDeviceNo(point,pointnumber,"03.1",deviceno)==1) { strncpy(s,recvbuff+1,7); // f=atof(s)*25; // printf("%f\n",f); // gcvt(f,8,s); strcpy(strbuf,""); strcatall(strbuf,TokenSeparator,token,TokenSeparator,DeviceSeparator,deviceno,DeviceSeparator,DataSeparator,"03.1",DataSeparator,DataSeparator,s,DataSeparator,DataSeparator,str_t,DataSeparator,NULL); sendto(udp_fd,strbuf,strlen(strbuf),0,(struct sockaddr *)&udp_addr,sizeof(struct sockaddr)); } } } if (FD_ISSET(localserver_fd,&readfds)) { FD_SET(localserver_fd,&readfds); FD_SET(com_fd,&readfds); sin_size=sizeof(struct sockaddr_in); if ((new_fd=accept(localserver_fd,(struct sockaddr *)&their_addr,&sin_size))==-1) { continue; } printf("local server socket get connection from %s.\n",inet_ntoa(their_addr.sin_addr)); close(new_fd); } }}int main(int argc,char **argv){ int conn_fd; struct sockaddr_in serv_addr; int ret,re; char str[20]=""; char buf[20]=""; char *msgid; int i; alarm_index=0; //read the point file pointnumber=read_data_from_file("/etc/config/pointfile",point); if (pointnumber==0) { printf("cannot open the pointfile.\n"); exit(1); } printf("pointnumber:%d\n",pointnumber); //read the communication parameters file re=read_comdata_from_file("/etc/config/param.conf",&read_net,&read_com); if (re==0) { printf("cannot read the param file.\n"); exit(1); } printf("serverip:%s\n",read_net.serverip); printf("serverport:%s\n",read_net.serverport); printf("baudrate:%s\n",read_com.baudrate); printf("parity:%s\n",read_com.parity); printf("databits:%s\n",read_com.databits); printf("stopbits:%s\n",read_com.stopbits); printf("handshaking:%s\n",read_com.handshaking); //request token,deviceport,localserverport token=(char *)malloc(20*sizeof(char)); msgid=(char *)malloc(20*sizeof(char)); deviceport=(char *)malloc(20*sizeof(char)); localserverport=(char *)malloc(20*sizeof(char)); conn_fd=socket(AF_INET,SOCK_STREAM,0); if (conn_fd==-1) { printf("create socket error.\n"); exit(1); } bzero(&serv_addr,sizeof(serv_addr)); serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(atoi(read_net.serverport)); inet_aton(read_net.serverip,&serv_addr.sin_addr); ret=connect(conn_fd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)); if (ret==-1) { printf("cannot connect to the server.\n"); printf("switch to single monitor mode.\n"); // processcomdata(); } strcatall(str,MessageSeparator,REQUEST_TOKEN,MessageSeparator,DataSeparator,"fire",DataSeparator,NULL); send(conn_fd,str,strlen(str),0); //request the token num recv(conn_fd,buf,sizeof(buf),0); strparse(buf,MessageSeparator,msgid); strparse(buf,DataSeparator,token); if (strcmp(msgid,REQUEST_TOKEN)==0) { printf("token:%s\n",token); strcpy(str,""); strcatall(str,MessageSeparator,REQUEST_SEND_DEVICE_MESSAGE_REMOTE_PORT,MessageSeparator,DataSeparator,token,DataSeparator,NULL); send(conn_fd,str,strlen(str),0); //request the device message send port recv(conn_fd,buf,sizeof(buf),0); strparse(buf,MessageSeparator,msgid); strparse(buf,DataSeparator,deviceport); if (strcmp(msgid,REQUEST_SEND_DEVICE_MESSAGE_REMOTE_PORT)==0) { printf("device port:%s\n",deviceport); strcpy(str,""); strcatall(str,MessageSeparator,REQUEST_LOCAL_SERVER_PORT,MessageSeparator,DataSeparator,token,DataSeparator,NULL); send(conn_fd,str,strlen(str),0); //request the local server port recv(conn_fd,buf,sizeof(buf),0); strparse(buf,MessageSeparator,msgid); strparse(buf,DataSeparator,localserverport); if (strcmp(msgid,REQUEST_LOCAL_SERVER_PORT)==0) { printf("local server port:%s\n",localserverport); } else { printf("receive local server port error.\n"); exit(1); } } else { printf("receive device port error.\n"); exit(1); } } else { printf("receive token number error.\n"); exit(1); } processdata(); free(token); free(msgid); free(deviceport); free(localserverport); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -