gravatar

Blog # 02 : A Simple Daytime Client & Server

An implementation of a TCP time-of-day client and server. This client establishes a TCP connection with a server and the server simply sends back the current time and date in a human-readable format.

TCP daytime client
1 #include "unp.h"
2 int
3 main(int argc, char **argv)
4{
5 int sockfd, n;
6 char recvline[MAXLINE + 1];
7 struct sockaddr_in servaddr;
8 if (argc != 2)
9 err_quit("usage: a.out ");
l0 if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
11 err_sys("socket error");
12 bzero(&servaddr, sizeof(servaddr));
13 servaddr.sin_family = AF_INET;
14 servaddr.sin.port = htons(13); /* daytime server */
15 if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
16 err_quit("inet_pton error for %s", argv[1]);
17 if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)
18 err_sys("connect error");
19 while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {
20 recvline[n] = 0; /* null terminate */
21 if (fputs(recvline, stdout) == EOF)
22 err_sys("fputs error");
23 }
24 if (n < 0)
25 err_sys("read error");
26 exit(O);
27 } 


TCP daytime Server
1 #include "unp. h"
2 #include
3 int
4 main(int arDc, char **argv)
5 {
6 int listenfd, connfd;
7 struct sockaddr_in servaddr;
8 char buff [MAXLINE];
9 time_t ticks;
10 listenfd = Socket(AF_INET, SOCK_STREAM, 0);
11 bzero(&servaddr, sizeof(servaddr));
12 servaddr.sin_family = AF_INET;
13 servaddr.sin_addr.s_addr = htonl(INADDR ANY);
14 servaddr.sin_port = htons(13); /* daytime server */
15 Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));
16 Listen(listenfd, LISTENQ);
17 for ( ; ; ) {
18     connfd = AccelDt(listenfd, (SA *) NULL, NULL);
19     ticks = time(NULL);
20     snprintf(buff, sizeof(buff) , "%.24s\r\n", ctime(&ticks));
21     Write(connfd, buff, strlen(buff));
22     Close(connfd);
23        }
24 }