17.UNP第一章 简介
获取时间的客户端代码:
- //客户端程序
- #include "unp.h"
- int main(int argc, char **argv)
- {
- int sockfd, n;
- char recvline[MAXLINE + ];
- struct sockaddr_in servaddr;
- //在ipv6可以运行:
- //struct sockaddr_in6 servaddr;
- if (argc != )
- err_quit("usage: a.out <IPaddress>");
- //创建TCP套接字,AF_INET表示网际,SOCK_STREAM表示字节流
- if ( (sockfd = socket(AF_INET, SOCK_STREAM, )) < )
- err_sys("socket error");
- //ipv6 if ( (sockfd = socket(AF_INET6, SOCK_STREAM, 0)) < 0)
- //结构体清零
- bzero(&servaddr, sizeof(servaddr));
- //设置协议族
- servaddr.sin_family = AF_INET;
- //ipv6 servaddr.sin6_family = AF_INET6;
- //设置端口号
- servaddr.sin_port = htons(); /* daytime server */
- //ipv6 servaddr.sin6_port = htons(8888);
- //把输入的点分十进制转换为合适的格式
- if (inet_pton(AF_INET, argv[], &servaddr.sin_addr) <= )
- //ipv6 if (inet_pton(AF_INET6, argv[1], &servaddr.sin_addr) <= 0)
- err_quit("inet_pton error for %s", argv[]);
- //与指定的服务器建立一个TCP连接
- //为了简化,把struct sockaddr宏定义为SA
- if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < )
- err_sys("connect error");
- //读服务器的应答,并用标准的I/O函数fputs输出结果.
- while ( (n = read(sockfd, recvline, MAXLINE)) > ) {
- recvline[n] = ; /* null terminate */
- if (fputs(recvline, stdout) == EOF)
- err_sys("fputs error");
- }
- if (n < )
- err_sys("read error");
- //终止程序
- exit();
- }
获取时间的服务器代码:
- #include "unp.h"
- #include <time.h>
- int main()
- {
- int listenfd,connfd;
- struct sockaddr_in servaddr;
- char buff[MAXLINE];
- time_t ticks;
- listenfd = Socket(AF_INET,SOCK_STREAM,);
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- //指定IP地址为INADDR_ANY的原因是如果服务器主机有多个网络接口,
- //服务器进程就可以在任意网络接口上接受客户连接.
- servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- //设置端口号
- servaddr.sin_port = htons();
- Bind(listenfd,(SA *)&servaddr,sizeof(servaddr));
- //把该套接字转换成一个监听套接字,这样来自客户的外来连接就可以在该
- //套接字上由内核接收.LISTENQ在unp.h头文件中定义,用来指定系统内核允许在这个监听
- //描述符上排队的最大客户连接数.
- Listen(listenfd,LISTENQ);
- for(;;)
- {
- //阻塞睡眠模式,三次握手,握手完毕后,accept返回
- //返回值是一个已连接描述符,该描述符用于与连接的那个客户通信.
- connfd = Accept(listenfd,(SA *)NULL,NULL);
- //获得当前时间
- ticks = time(NULL);
- //ctime可以把该整数值转换为时间的模式
- //snprintf第二个参数指定缓冲区的大小,可以确保该缓冲区不溢出
- //为了避免黑客的溢出攻击,最好把使用的函数比如(gets,strcat,strcpy)改为
- //fgets,strncat,strncpy
- snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));
- Write(connfd,buff,strlen(buff));
- //终止连接
- close(connfd);
- }
- return ;
- }
17.UNP第一章 简介的更多相关文章
- 读书笔记 - javascript 高级程序设计 - 第一章 简介
第一章 简介 诞生时间 1995 最初用途 客服端验证 第一版标准 注意是标准 1997年 Ecma-262 一个完整的js实现由三部分组成 ECMAScript DOM 文档对象模型 BO ...
- UNP学习笔记(第一章 简介)
环境搭建 1.下载解压unpv13e.tar.gz 2.进入目录执行 ./configurecd lib //进入lib目录make //执行make命令 3.将生成的libunp.a静态库复制到/u ...
- Javascript模式(第一章简介)------读书笔记
一:模式 模式是一个通用问题的解决方案,可以提供一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 本书主要讨论如下三种类型的模式 1 设计模式:可复用面向对象软件的基础,包括singleto ...
- KnockoutJS 3.X API 第一章 简介
本文纯正翻译自官网API文档.其中包含一下个人理解. 官网API地址:http://knockoutjs.com/documentation/introduction.html 简介 Knockout ...
- python3 第一章 - 简介
1.什么是python 引用官方的话:Python是一种易于学习,强大的编程语言.它具有高效的高级数据结构,并通过简单而有效的方法来进行面向对象编程.Python的优雅语法和动态类型,以及其解释性质, ...
- UNIX网络编程卷1 第一章 简介 读书笔记。
基本没讲什么,一点点计算机网络发展史,一点点socket()简单介绍,最重要的是1.3节协议无关性. 协议无关性: 贯穿整本书的一个重要特性,他主要强调的是 socket是网络协议无关的编程接口. s ...
- 《JAVA NIO》第一章 简介
1.2 CPU已不再是束缚 相反,是JVM 自身在I/O 方面效率欠佳.操作系统与Java 基于流的I/O模型有些不匹配. 操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA) ...
- Spring in Action --- 第一章 简介
简化java开发 基于POJO的轻量级和最小入侵性编程 通过依赖注入和面向接口实现松耦合 基于切面和管理进行声明式编程 通过切面和模板减少样板式代码 bean的生命周期 Spring对bean进行实例 ...
- 《深入Linux内核架构》笔记 --- 第一章 简介和概述
Linux将虚拟地址空间划分为两个部分,分别称为内核空间和用户空间 各个系统进程的用户空间是完全彼此分离的,而虚拟地址空间顶部的内核空间总是同样的,无论当前执行的是哪个进程. 尽管Intel处理器区分 ...
随机推荐
- css3中的animation属性
作用:通过给元素添加animation属性,可以赋予该元素动画效果. <!DOCTYPE html><html> <head> <styl ...
- cropper+pillow处理上传图片剪裁(二)
上次说到处理上传头像的方法是临时保存在本地,其实这样做并不妥,而且修改后的头像重新上传到model中也很麻烦,差了很多资料,解决了这个问题 大致思路:用户上传原图和修改数据—PIL修改后将图片保存为内 ...
- 关于iscroll.js插件的使用
iscroll 作用: 可以让区域滚动效果好看一些 使用: 1. html结构 外面必须包一层盒子,切内部的元素要尽量简单,不然会影响滚动效果 <div id="wrapper&quo ...
- H5 微信公众号 监听返回事件
/*-----监听返回事件-----*/ function pushHistory(returnUrl,currentUrl,currentTitle) { window.addEventListen ...
- 详解sqlserver查询表索引
SELECT 索引名称=a.name ,表名=c.name ,索引字段名=d.name ,索引字段位置=d.colid ? 1 2 3 4 5 6 7 8 FROM sysindexes a ...
- Openwrt PPTP Server笔记
1.安装PPTP opkg updateopkg install kmod-mppeopkg install pptpd 2./etc/pptpd.conf option /etc/ppp/optio ...
- QS之vsim
vsim - The vsim command invokes the VSIM simulator -L <library_name> … (optional) Specifies th ...
- PythonOpenCV--Rtrees随机森林
360确实很个性,哈哈,你个貔貅,只吃不吐! Rtrees介绍!参考链接:http://docs.opencv.org/modules/ml/doc/random_trees.html 原文链接:Py ...
- adb使用实践
目录 1. adb 端口占用 2. 查看包名和MainAcitivity =============================================================== ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
http://www.cnblogs.com/wuhuacong/p/3871991.html 基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览 在博客园很多文章 ...