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处理器区分 ...
随机推荐
- JavaScript全局函数
JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能(以后的章节中可能会用到):escape( ).eval_r( ).isFinite( ).isNaN( ).parseFloa ...
- Spring @Scheduled 注解 定时器例子
<!--xmlns 多加下面的内容--> xmlns:task="http://www.springframework.org/schema/task" <!-- ...
- CUDA与OpenCL架构
CUDA与OpenCL架构 目录 CUDA与OpenCL架构 目录 1 GPU的体系结构 1.1 GPU简介 1.2 GPU与CPU的差异 2 CUDA架构 2.1 硬件架构 2.1.1 GPU困境 ...
- vue 返回上一页在原来的位置
http://www.jb51.net/article/118592.htm http://blog.csdn.net/qq_26598303/article/details/51189235 htt ...
- linux网络路由配置
网卡配置文件介绍: # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 (描述网卡对应的设备别名,例如ifcfg-eth0的文件中它为 ...
- SpringMVC(一) HelloWorld
学习新东西的的第一个程序--HelloWorld,以下是SpringMVC的HelloWorld 第一步: 用MAVEN 创建webapp,并添加依赖.(强烈建议使用MAVEN,MAVEN学习书籍和视 ...
- java调用第三方命令,process.waitfor()挂起(你不知道的坑)
我们常在java中运行第三方程序,如sh.python,java提供一个Runtime.exec()方法,生成一个Process对象.今天在使用这个方法的时候,发现接口半天没有返回数据.查了一下,原来 ...
- Matrix Matcher UVA - 11019AC_自动机 + 代价提前计算
Code: #include<cstdio> #include<cstring> #include<algorithm> #include<vector> ...
- Day 09 文件操作
什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位.文件的操作是基于文件,即文件的操作核心就是:读和写.也 就是只要我们想要操作文件就是对操作系统发起请求,然后由操作系统将用户或应 ...
- python之parameterized模块
parameterized扩展了py.test参数化测试,unittest参数化测试. <1>一个小练习 import unittest import math @parameterize ...