TCP的时间获取客户程序和时间获取服务器程序

来源:互联网 发布:c语言中float与double 编辑:程序博客网 时间:2024/05/21 01:56

需要使用root权限启动服务器,因为服务器使用的port是标准的port


客户端程序如下:

/*************************************************************************> File Name: daytimetcpcli.c> Author: ma6174> Mail: ma6174@163.com > Created Time: Tue 08 Nov 2016 04:19:17 PM CST ************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <netinet/in.h>#define MAXLINE1024voiderr_quit(const char *str_err){fprintf(stderr, "%s\n", str_err);exit(-1);}void err_sys(const char *str_err){fprintf(stderr, "%s\n", str_err);exit(-1);}intmain(int argc, char **argv){charerr_msg[BUFSIZ];intsockfd;intn;charrecvline[MAXLINE];struct sockaddr_inservaddr;// 判定输入参数if (argc != 2)err_quit("usage: <IPaddress>");// 得到一个套接字描述符sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0) err_sys("socket error");// 设置服务器的套接字 以IPV4为例memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family= AF_INET;servaddr.sin_port= htons(13);if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) {sprintf(err_msg, "inet_pton error for %s", argv[-1]);err_quit(err_msg);}if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)err_sys("connect error");// 读取服务器的时间while ( (n = read(sockfd, recvline, MAXLINE)) > 0) {recvline[n] = 0;if (fputs(recvline, stdout) == EOF)err_sys("fputs error");}if (n < 0)err_sys("read error");exit(0);}


服务端程序如下:

/*************************************************************************> File Name: daytimetcpsrv.c> Author: ma6174> Mail: ma6174@163.com > Created Time: Tue 08 Nov 2016 05:10:29 PM CST ************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include <netinet/in.h>#define MAXLINE1024#define LISTENQ5voiderr_quit(const char *str_err){fprintf(stderr, "%s\n", str_err);exit(-1);}voiderr_sys(const char *str_err){fprintf(stderr, "%s\n", str_err);exit(-1);}intSocket(int faimly, int type, int protocol){int sockfd;if ( (sockfd = socket(faimly, type, protocol)) < 0)err_sys("socket error");return sockfd;}void Bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen){if (bind(sockfd, myaddr, addrlen) < 0)err_sys("bind error");}void Listen(int sockfd, int backlog){if (listen(sockfd, backlog) < 0)err_sys("listen error");}intAccept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen){int connfd;connfd = accept(sockfd, cliaddr, addrlen);if (connfd < 0)err_sys("accept error");return connfd;}voidClose(int sockfd){if (close(sockfd) < 0)err_sys("close error");}intmain(int argc, char **argv){charerr_msg[BUFSIZ];intconnfd;intlistenfd;charbuff[MAXLINE];time_tticks;struct sockaddr_inservaddr;// 得到一个套接字描述符listenfd = Socket(AF_INET, SOCK_STREAM, 0);if (listenfd < 0) err_sys("socket error");// 设置服务器的套接字 以IPV4为例memset(&servaddr, 0, sizeof(servaddr));servaddr.sin_family= AF_INET;servaddr.sin_port= htons(13);servaddr.sin_addr.s_addr= htonl(INADDR_ANY);// 绑定套接字到内核Bind(listenfd, (struct sockaddr *) & servaddr, sizeof(servaddr));// 启动监听套接字Listen(listenfd, LISTENQ);for ( ; ; ) {// 获得一个连接套接字描述符connfd = Accept(listenfd, NULL, NULL);ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));write(connfd, buff, strlen(buff));// 关闭连接套接字描述符Close(connfd);}exit(0);}



Makefile如下:

PROGS= daytimetcpcli \  daytimetcpsrvOBJS= daytimetcpcli.o \  daytimetcpsrv.oAll:${PROGS}daytimetcpcli:daytimetcpcli.occ -o daytimetcpcli daytimetcpcli.odaytimetcpsrv:daytimetcpsrv.occ -o daytimetcpsrv daytimetcpsrv.oclean:rm $(PROGS) $(OBJS)


0 0
原创粉丝点击