// time client // daron spektor 2005 #include #include #include #include #include #include int word2int(unsigned char *p) { int result; result =((int)p[0])<<24; result|=((int)p[1])<<16; result|=((int)p[2])<<8; result|=(int)p[3]; return result; } int main() { struct sockaddr_in server; struct sockaddr_in me; struct sockaddr_in sender; char *msg = "send"; char recvd[4]; int rlen=0; int sock=0; /////////////////////// select() stuff struct timeval timer; fd_set readfds; fd_set masterfds; FD_ZERO(&masterfds); FD_ZERO(&readfds); /////////////////////// bzero(recvd, 4); me.sin_family = AF_INET; me.sin_port = htons(0); // any available port, i dont care me.sin_addr.s_addr = htonl(INADDR_ANY); // my address bzero(&(me.sin_zero), 8); server.sin_family = AF_INET; server.sin_port = htons(12221); server.sin_addr.s_addr = inet_addr("127.0.0.1"); //ip of server here bzero(&(server.sin_zero), 8); sock=socket(AF_INET, SOCK_DGRAM, 0); bind(sock, (struct sockaddr *)&me, sizeof(struct sockaddr)); sendto(sock, msg, 5, 0, (struct sockaddr *)&server, sizeof(struct sockaddr)); FD_SET(sock, &masterfds); while (1) { timer.tv_sec=2; timer.tv_usec=0; readfds=masterfds; select(sock+1, &readfds, NULL, NULL, &timer); if (FD_ISSET(sock, &readfds)) { recvfrom(sock, recvd, 4, 0, (struct sockaddr *)&sender, &rlen); printf(">> %d\n", word2int(recvd)); fflush(stdout); FD_CLR(sock, &readfds); } else { printf("timeout... trying again\n"); fflush(stdout); sendto(sock, msg, 5, 0, (struct sockaddr *)&server, sizeof(struct sockaddr)); } } return 0; }