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处理器区分 ...
随机推荐
- css中max-width和min-width的应用
max-width:从字面意思可以看出,是规定元素本身最大宽度,元素本身宽度应小于等于最大宽度值. min-width:从字面意思可以看出,是规定元素本身最小宽度,元素本身宽度应大于等于最小宽度值. ...
- innerHTML的用法
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 读书笔记6-浪潮之巅(part1)
浪潮之巅 ——对于一个人来讲,一生能够赶上一次科技革命的浪潮也就足够了 近一百多年来,总有一些公司很幸运地站在了技术革命的浪尖上.而一旦处在那个位置,就算只用随着潮流的发展而前行,也能安安稳稳地发展十 ...
- MemCached总结三:PHP的memcached管理接口
在Web系统中应用MemCached缓存技术,必须使用客户端API(PHP)进行访问,这样才能将用户请求的动态数据,缓存到memcached服务器中,来减少对数据库的访问压力.PHP中提供了用于内存缓 ...
- 三维重建:QT+OpenNI+Kinect图像校正
后记: 当时能不放弃这个方向是因为这里面涉及了一种很有效的三位场景存储方式,可能给出除图元建模之外的一种三维场景描述方式.这和Flash与位图的对比一样,基于图元的flash始终抵不过基于点描述的位图 ...
- 模拟试题C
模拟试题C 一.单项选择题(2′*14 =28′) 1.双线性法向插值法(Phong Shading)的优点是( ) A)法向计算精确 B)高光域准确 C)对光源和视点没有限制 D)速度较快 2.用编 ...
- UVa1585修改版
#include<stdio.h> int main() { int i,k=-1; char a[100]; while(scanf("%s",&a)!=EO ...
- 03--实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
前言 很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmware有三种网络模式,对初学者来说也比较眼花聊乱,今天我就来基于虚拟机3种网络模式,帮大家普及下虚拟机上网的背景知识.(博文原创自http ...
- js代码 注释 test
<script type="text/javascript"> var obj = { tyep: 'GET', url: '/Backstage/Home/Menu' ...
- re模块findall函数用法
title: Python subtitle: 1.re模块findall函数用法 date: 2018-12-13 10:17:28 --- Python re 模块 findall 函数用法简述 ...