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
- TCP的时间获取客户程序和时间获取服务器程序
- 时间获取的客户和服务器程序
- unix网络基础-显示客户IP地址和端口号的时间获取服务器程序
- unix网络基础-TCP时间获取客户程序
- TCP时间获取socket程序
- Unix网络编程:关于编译并测试TCP时间获取的客户程序
- 获取时间程序(客户端和服务器)
- 1.简介 1.2简单的时间获取客户程序
- 1.2 一个简单的时间获取客户程序
- unix网络基础-TCP时间获取服务器程序
- 一个简单的TCP 客户端时间获取程序 ipv4/ipv6
- 获取windows时间的程序
- 获取时间的小程序
- 简单的时间获取程序
- 读书笔记之 简单时间获取客户/服务程序
- Unix网络编程实践:时间获取客户程序
- 织网的日子里——第一章:TCP时间获取之客户端和服务器端程序
- 简单的获取服务器时间程序(UNIX网络编程)
- NOIP2014复赛提高组day1(A:生活大爆炸版石头剪刀布 B:联合权值 C:飞扬的小鸟)
- java-01-实现多行输入 并且以指定end 字符(串) 结束 并且查找指定的单个字符
- objc_setAssociatedObject 使用
- Asp.net给图片加上水印效果
- VirtualBox中克隆了一个虚拟系统出现IP问题
- TCP的时间获取客户程序和时间获取服务器程序
- 编写高效的CSS
- Jquery 对div 先删除后恢复
- 一天一条Linux指令-crontab
- 认识json
- Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性
- 分享一个常用的sqlHelper类
- 第11周项目1-验证算法(1)层次遍历算法的验证
- HDU 4418 Time travel (概率DP+高斯消元)