/* Sample UDP client */ //#include //#include //#include #define _GNU_SOURCE 1 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct timeval tv; struct timezone tz; int waitsok(int sok) { struct timeval stTimeOut; fd_set stReadFDS; FD_ZERO(&stReadFDS); // Timeout of one second stTimeOut.tv_sec = 1; stTimeOut.tv_usec = 0; FD_SET(sok, &stReadFDS); return select(sok+1, &stReadFDS, 0, 0, &stTimeOut); } int main(int argc, char**argv) { int sockfd,n; struct sockaddr_in servaddr,cliaddr; unsigned sendbuf[10]; unsigned recvbuf[10]; if (argc != 2) { printf("usage: powerclient \n"); exit(1); } sockfd=socket(AF_INET,SOCK_DGRAM,0); bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr=inet_addr(argv[1]); servaddr.sin_port=htons(124); gettimeofday(&tv,&tz); usleep(50000); //50 ms for the peer to have updated the table entry for this second sendbuf[0]=54656866; sendbuf[1]=tv.tv_sec&255; sendto(sockfd,sendbuf,8,0,(struct sockaddr *)&servaddr,sizeof(servaddr)); rerx: gettimeofday(&tv,&tz); if (waitsok(sockfd)) { n=recvfrom(sockfd,recvbuf,40,0,NULL,NULL); if (n!=20) goto rerx; if (recvbuf[0]!=54652345) goto rerx; if (recvbuf[1]!=sendbuf[1]) goto rerx; printf("%i\n",recvbuf[2]); } }