/* Get time via TCP from port 13 (daytime) * */ #include #include #include #include #include #include #include #define BUFSIZE 150 #define TCP void error ( char *msg ) { fprintf ( stderr, "errno = %d\n", errno ); fprintf ( stderr, "%s\n", strerror ( errno ) ); fprintf ( stderr, "%s\n", msg ); exit ( 1 ); } int main ( int argc, char **argv ) { struct sockaddr_in serv; char buff[BUFSIZE]; int sockfd, n; #ifdef UDP if ( (sockfd = socket ( PF_INET, SOCK_DGRAM, 0 )) < 0 ) #else if ( (sockfd = socket ( PF_INET, SOCK_STREAM, 0 )) < 0 ) #endif error ( "socket error" ); // printf ( "sockfd = %d\n", sockfd ); bzero ( (char *) &serv, sizeof(serv) ); serv.sin_family = AF_INET; serv.sin_addr.s_addr = inet_addr ( "127.0.0.1" ); // serv.sin_addr.s_addr = inet_addr ( "192.168.0.5" ); serv.sin_port = htons(13); /* We can write any rubbish to the daytime server. * It returns the daytime string regardless. */ #ifdef UDP if ( sendto ( sockfd, buff, BUFSIZE, 0, (struct sockaddr *) &serv, sizeof(serv) ) != BUFSIZE ) error ( "sendto error" ); if ( (n = recvfrom ( sockfd, buff, BUFSIZE, 0, (struct sockaddr *) NULL, (int *) NULL )) < 2 ) error ( "recvfrom error" ); #else if ( connect ( sockfd, (struct sockaddr *) &serv, sizeof(serv) ) != 0 ) error ( "connect error" ); write ( sockfd, buff, BUFSIZE ); n = read ( sockfd, buff, BUFSIZE ); if ( n < 2 ) error ( "read error" ); #endif buff[n-2] = 0; printf ( "%s\n", buff ); exit ( 0 ); } // THE END