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处理器区分 ...
随机推荐
- 【技术累积】【点】【java】【9】Optional
基础概念 java8引入的,java9有加强 Google公司出品 旨在更好的处理NullPointException 创建Optional实例和基础使用 Optional op1 = Optiona ...
- Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
一.spring依赖注入使用方式 @Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byT ...
- Zabbix系列-REHL6.10离线方式安装Zabbix 4.0 LTS
环境 第零步:关闭系统默认防火墙 setenforce 0 sed -i -r "/^SELINUX=/c SELINUX=disabled" /etc/selinux/confi ...
- Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档
0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...
- Jmeter中使用CSV Data Set Config
A
- Python数据分析5-----数据规约
1.数据规约概念和目的 数据规约是产生更小且保留数据完整性的新数据集. 意义:降低无效错误数据的影响.更有效率.降低存储成本. 2.属性规约 (1)属性合并(降维):比如PCA (2)删除不相关属性 ...
- gud-cloud
架构:计算层:三台机器,包含处理器,内存条,外加一个64GB的存储器,这个存储器安装exsi主机,然后创建cvm虚拟机,硬盘空间选择在之前安装exsi主机的存储器里面 存储层:三台机器内置多个硬盘8T ...
- 【codeforces 731D】80-th Level Archeology
[题目链接]:http://codeforces.com/contest/731/problem/D [题意] 给你n个象形文; 每个象形文由l[i]个数字组成; 你可以把所有的组成象形文的数字同时增 ...
- 洛谷 1119 灾后重建 Floyd
比较有趣的Floyd,刚开始还真没看出来....(下午脑子不太清醒) 先考虑一下Floyd本身的实现原理, for(k=1;k<=n;k++) for(i=1;i<=n;i++) for( ...
- HDU 1788
必须MARK下:任何时候都要保持清醒头脑,不要被题目绕了.. 其实就是求最小公倍数. #include <iostream> #include <cstdio> #includ ...