注册 | 登录读书好,好读书,读好书!
读书网-DuShu.com
当前位置: 首页出版图书生活时尚育儿/成长家庭教育TCP/IP网络互联技术:客户:服务器编程与应用(卷3)

TCP/IP网络互联技术:客户:服务器编程与应用(卷3)

TCP/IP网络互联技术:客户:服务器编程与应用(卷3)

定 价:¥54.00

作 者: (美)Douglas E﹒Comer David L﹒Stevens 张卫 王能;张卫译
出版社: 清华大学出版社
丛编项: 国外经典教材·计算机科学与技术
标 签: TCP/IP

ISBN: 9787302093794 出版时间: 2005-03-01 包装: 简裝本
开本: 16开 页数: 446 字数:  

内容简介

  本书介绍了Windows操作系统平台上如何使用Windows套接字应用程序接口(Windows Socket API)编写TCP/IP通信程序。重点放在客户-服务器机制上,介绍了客户-服务器机制和应用程序用于网络通信的套接字接口,分析了分布式程序的客户端和服务器两部分的算法,讨论了客户端和服务器的设计及遵循的模式。本书在并发处理上也花费了相当大的篇幅,描述了并发线程以及相关的创建线程的操作系统函数。本书给出了能说明每个设计思想的实现方法,讨论了包括应用层网关和管道在内的各种技术,回顾了几个标准应用协议,并使用它们说明一些算法和实现技术。本书包含的一些例子程序显示了每个设计实际上如何操作,大多数的例子实现了标准因特网应用协议。本书适合于大学高年级学生或研究生的网络编程入门课程,也可作为程序员的参考书。

作者简介

  DouglasComer博士是PurdueUniv的教授,讲授操作系统和计算机网络的课程,早在20世纪70年代后期,他就参与了TCP/IP和互联网的研究,并成为世界公认的权威,由他设计实现了X25NET和CYPress网络,以及Xinu操作系统。DavidStevens是普渡大学计算中心的程序员。TCT/IP的世界经典教材就是他们所著,他们的著作已誉满全球,我国多家出版社也引进了其多部著作的版权,他们的TCP/IP网络互联技术卷1、卷2、卷3在我国都有影印版本。

图书目录

第1章 概述
1.1 TCP/IP的应用
1.2 分布式环境下应用程序的设计
1.3 标准和非标准的应用协议
1.4 使用标准应用协议的例子
1.5 telnet连接的例子
1.6 用TELNET访问其他服务
1.7 应用协议和软件的灵活性
1.8 从提供者的角度看服务
1.9 本书的其余部分
1.10 小结
进一步的研究
习题
第2章 客户.服务器模型和软件的设计
2.1 简介
2.2 动机
2.3 术语和概念
2.3.1 客户端和服务器
2.3.2 特权和复杂性
2.3.3 标准和非标准的客户端软件
2.3.4 客户端的参数化
2.3.5 无连接的与面向连接的服务
2.3.6 无状态与有状态的服务器
2.3.7 有状态的文件服务器例子
2.3.8 无状态是一个协议问题
2.3.9 充当客户端的服务器
2.4 小结
进一步的研究
习题
第3章 客户.服务器软件的并发处理
3.1 引言
3.2 网络中的并发
3.3 服务器中的并发
3.4 术语和概念
3.4.1 进程的概念
3.4.2 线程
3.4.3 程序和线程
3.4.4 过程调用
3.5 一个创建并发线程的例子
3.5.1 一个顺序执行的C的示例
3.5.2 程序的并发版本
3.5.3 时间片
3.6 分离的线程
3.7 上下文切换和协议软件设计
3.8 并发和异步I/O
3.9 UNIX下的并发
3.10 执行一个单独编译的程序
3.11 小结
进一步的研究
习题
第4章 协议的程序接口
4.1 引言
4.2 宽松定义的协议软件接口
4.3 接口功能
4.4 概念性接口的规范
4.5 API的实现
4.6 网络通信的两种基本方法
4.7 ANSI C中提供的基本I/O函数
4.8 UNIX套接字API的历史
4.9 小结
进一步的研究
习题
第5章 套接字API
5.1 简介
5.2 套接字的历史
5.3 一个协议接口的制订
5.4 套接字的抽象
5.4.1 套接字描述符
5.4.2 套接字的系统数据结构
5.4.3 使用套接字
5.5 指定端点地址
5.6 通用地址结构
5.7 套接字API中的函数
5.7.1 WSAStartup函数
5.7.2 WSACleanup函数
5.7.3 Socket函数
5.7.4 connect函数
5.7.5 send函数
5.7.6 recv函数
5.7.7 closesocket函数
5.7.8 bind函数
5.7.9 listen函数
5.7.10 accept调用
5.7.11 TCP套接字调用小结
5.8 用于整数转换的实用例程
5.9 程序中使用套接字调用
5.10 用作套接字调用参数的符号常量
5.11 小结
进一步的研究
习题
第6章 客户软件设计中的算法和问题
6.1 引言
6.2 学习算法而不研究细节
6.3 客户体系结构
6.4 标识服务器的地址
6.5 分析地址参数
6.6 查找域名
6.7 由名字查找熟知端口
6.8 端口号和网络字节顺序
6.9 由名字查找协议
6.10 TCP客户算法
6.11 分配套接字
6.12 选择本地协议端口号
6.13 选择本地IP地址的一个基本问题
6.14 将TCP套接字连接到服务器
6.15 使用TCP和服务器通信
6.16 从TCP连接上读取响应
6.17 关闭TCP连接
6.17.1 需要部分关闭
6.17.2 部分关闭的操作
6.18 UDP客户端的编程
6.19 面向连接的和无连接的UDP套接字
6.20 对UDP使用connect
6.21 使用UDP和服务器通信
6.22 关闭使用UDP的套接字
6.23 对UDP的部分关闭
6.24 关于UDP不可靠性的警告
6.25 小结
进一步的研究
习题
第7章 客户软件举例
7.1 引言
7.2 小例子的重要性
7.3 隐藏细节
7.4 客户程序的过程库例子
7.5 ConTCP的实现
7.6 ConUPD的实现
7.7 用来建立连接的过程
7.8 使用例子库
7.9 DAYTIME服务
7.10 DAYTIME的TCP客户实现
7.11 从TCP连接上读取数据
7.12 TIME服务
7.13 访问TIME服务
7.14 精确的时间和网络时延
7.15 TIME服务的UDP客户
7.16 ECHO服务
7.17 ECH0服务的TCP客户
7.18 ECHO服务的UDP客户
7.19 小结
进一步的研究
习题
第8章 服务器软件设计的算法和问题
8.1 引言
8.2 概念性的服务器算法
8.3 并发服务器和循环服务器
8.4 面向连接的访问和无连接的访问
8.5 面向连接的服务器
8.6 无连接的服务器
8.7 故障、可靠性和无状态
8.8 优化无状态服务器
8.9 四种基本类型的服务器
8.10 请求处理时间
8.11 循环服务器的算法
8.12 循环的、面向连接的服务器算法
8.13 用INADDR_ANY绑定熟知地址
8.14 将套接字设置为被动模式
8.15 接受连接并使用这些连接
8.16 循环的、无连接的服务器算法
8.17 在无连接的服务器上构造响应地址
8.18 并发服务器的算法
8.19 主线程和子线程
8.20 并发的、无连接的服务器的算法
8.21 并发的、面向连接的服务器算法
8.22 用分离的程序作为子进程
8.23 使用单个线程实现表面上的并发性
8.24 各服务器类型的使用场合
8.25 服务类型小结
8.25.1 循环的、无连接的服务器
8.25.2 循环的、面向连接的服务器
8.25.3 并发的、无连接的服务器
8.25.4 并发的、面向连接的服务器
8.26 重要的服务器死锁的问题
8.27 其他的实现方法
8.28 小结
进一步的研究
习题
第9章 循环无连接服务器(UDP)
9.1 引言
9.2 创建被动套接字
9.3 线程结构
9.4 TIME服务器举例
9.5 小结
进一步的研究
习题
第10章 循环的、面向连接的服务器(TCP)
10.1 引言
lO.2 分配被动的TCP套接字
10.3 实现DAYTIME服务的服务器
10.4 线程结构
lO.5 DAYTIME服务器举例
10.6 关闭连接
10.7 连接终止和服务器的脆弱性
10.8 小结
进一步的研究
习题
第11章 并发的、面向连接的服务器(TCP)
11.1 引言
11.2 并发ECH0
11.3 循环的实现和并发的实现的比较
11.4 线程结构
11.5 并发的ECH0服务器举例
11.6 小结
进一步的研究
习题
第12章 单线程、并发服务器(TCP)
12.1 引言
12.2 服务器中的数据驱动处理
12.3 单线程的数据驱动处理
12.4 单线程服务器的线程结构
12.5 单线程ECH0服务器举例
12.6 小结
进一步的研究
习题
第13章 多协议服务器(TCP,UDP)
13.1 引言
13.2 减少服务器数量的动机
13.3 多协议服务器的设计
13.4 线程结构
13.5 多协议DAYTIME服务器举例
13.6 共享代码的概念
13.7 并发的多协议服务器
13.8 小结
进一步的研究
习题
第14章 多服务服务器(TCP,UDP)
14.1 引言
14.2 服务器程序的合并
14.3 无连接的、多服务服务器的设计
14.4 面向连接的、多服务服务器的设计
14.5 并发的、面向连接的、多服务服务器
14.6 单线程多服务服务器的实现
14.7 多服务服务器对其他单独程序的调用
14.8 多服务、多协议设计
14.9 一个多服务服务器的例子
14.10 静态的和动态的服务器配置
14.11 一个超级服务器的例子,Inetd
14.12 小结
进一步的研究
习题
第15章 服务器并发性的统一高效管理
15.1 引言
15.2 在循环设计和并发设计之间做出选择
15.3 并发等级
15.4 需求驱动的并发
15.5 并发的代价
15.6 额外开销和时延
15.7 小时延会出问题
15.8 线程预分配
15.8.1 预分配技术
15.8.2 面向连接的服务器的预分配
15.8.3 无连接服务器的预分配
15.8.4 预分配、突发通信量和NFS
15.8.5 多处理器上的预分配
15.9 延迟的线程分配
15.10 两种技术统一的基础
15.11 两种技术的结合
15.12 小结
进一步的研究
习题
第16章 客户端的并发
16.1 引言
16.2 并发的优点
16.3 运行控制的动机
16.4 与多个服务器的并发联系
16.5 实现并发的客户端
16.6 单线程实现
16.7 使用ECHO的并发客户端例子
16.8 并发客户端的执行
16.9 计时器的管理
16.10 输出举例
16.11 例子代码中的并发性
16.12 小结
习题
第17章 传输层和应用层的隧道技术
17.1 引言
17.2 多协议环境
17.3 混合各种网络技术
17.4 动态电路分配
17.5 封装和隧道技术
17.6 通过IP瓦联网的隧道技术
17.7 客户端和服务器之间的应用层隧道技术
17.8 隧道技术、封装以及拨号电话线
17.9 小结
进一步的研究
习题
第18章 应用层网关
18.1 引言
18.2 受限环境中的客户端与服务器
18.2.1 多重技术的现实
18.2.2 功能有限的计算机
18.2.3 安全性引发的连通性约束
18.3 使用应用网关
18.4 通过邮件网关的交互
18.5 邮件网关的实现
18.6 应用网关和隧道技术的比较
18.7 应用网关和功能受限的系统
18.8 为了安全性使用的应用网关
18.9 应用网关和额外跳问题
18.10 一个应用网关的例子
18.11 基于Web的应用网关的细节
18.12 调用CGI程序
18.13 RFC应用网关的URL
18.14 通用的应用网关
18.15 SLIRP的运行
18.16 SLIRP如何处理连接
18.17 IP寻址与SLlRP
18.18 小结
进一步的研究
习题
第19章 外部数据表示(XDR)
19.1 引言
19.2 计算机中数据的表示
19.3 N平方转换问题
19.4 网络标准字节序
19.5 外部数据表示事实上的标准
19.6 XDR数据类型
19.7 隐含类型
19.8 使用XDR的软件支持
19.9 XDR库例行程序
19.10 一次一部分地构建报文
19.11 XDR库的转换例行程序
19.12 XDR流、I/0和TCP
19.13 记录、记录边界和数据报I/O
19.14 小结
进一步的研究
习题
第20章 远程过程调用(RPC)的概念
20.1 引言
20.2 远程过程调用模型
20.3 构建分布式程序的两种模式
20.4 常规过程调用的概念模型
20.5 过程模型的扩充
20.6 常规过程调用的执行和返回
20.7 分布式系统中的过程模型
20.8 客户一服务器和RPC的相似性
20.9 作为程序的分布式计算
20.10 Sun Microsystems的远程过程调用定义
20.11 远程程序和过程
20.12 减少参数的数量
20.13 标记远程程序和过程
20.14 适应远程程序的多个版本
20.15 远程程序中的过程互斥
20.16 通信语义
20.17 至少一次语义
20.18 RPC重传
20.19 把远程程序映射到协议端口
20.20 动态端口映射
20.21 RPC端口映射器算法
20.22 RPC消息格式
20.23 为远程过程排列参数
20.24 身份认证
20.25 RPC消息表示的例子
20.26 认证字段的例子
20.27 小结
进一步的研究
习题
第21章 分布式程序的生成(Rpcgen概念)
21.1 引言
21.2 用使用远程过程调用
21.3 支持RPC的编程机制
21.4 将程序分割成本地过程和远程过程
21.5 为RPC增加代码
21.6 桩(stub)过程
21.7 多个远程过程和分发
21.8 客户端的桩过程名称
21.9 使用Rpcgen生成分布式程序
21.10 Rpcgen输出和接口过程
21.11 Rpcgen的输入和输出
21.12 使用Rpcgen构建客户端和服务器
21.13 小结
进一步的研究
习题
第22章 分布式程序的生成(Rpcgen的例子)
22.1 引言
22.2 举例说明Rpcgen
22.3 查询字典
22.4 建立分布式程序的八个步骤
22.5 步骤1:建立常规应用程序
22.6 步骤2:将程序分割成两部分
22.7 步骤3:创建Rpcgen规范
22.8 步骤4:运行Rpcgen
22.9 Rpcgen生成的.h文件
22.10 Rpcgen生成的XDR转换文件
22.11 Rpcgen生成的客户端代码
22.12 Rpcgen生成的服务器代码
22.13 步骤5:编写桩接口过程
22.13.1 客户端接口例程
22.13.2 客户端接口例程
22.14 步骤6:编译链接客户端程序
22.15 步骤7:编译链接服务器程序
22.16 步骤8:启动服务器和运行客户端
22.17 小结
进一步的研究
习题
第23章 网络文件系统(NFS)的概念
23.1 引言
23.2 远程文件访问与文件传输
23.3 对远程文件的操作
23.4 异构计算机之间的文件访问
23.5 无状态的服务器
23.6 NFS和UNIX文件语义
23.7 UNIX文件系统概述
23.7.1 基本定义
23.7.2 无记录边界的字节序列
23.7.3 文件的拥有者和组标识符
23.7.4 保护和访问
23.7.5 UNIX中的打开一读一写一关闭范例
23.7.6 UNIX中的数据传输
23.7.7 搜索目录的权限
23.7.8 UNIX中的随机访问
23.7.9 搜索超过UNIX文件结尾
23.7.10 UNIX文件位置和并发访问
23.7.11 并发访问时的写操作的语义
23.7.12 UNIX中的文件名和路径
23.7.13 UNIX索引节点:存储在文件中的信息
23.7.14 UNIX中的Stat操作
23.7.15 UNIX的文件命名机制
23.7.16 装配UNIX文件系统
23.7.17 UNIX文件名解析
23.7.18 UNIX符号链接
23.8 NFS下的文件
23.9 NFS文件类型
23.10 NFS文件模式
23.11 NFS文件属性
23.12 NFS的客户端和服务器
23.13 NFS客户端的操作
23.14 NFS的客户端和UNIX
23.15 NFS的装配(Mounts)
23.16 文件句柄
23.17 NFS句柄取代路径名
23.18 Windows下的NFS客户端
23.19 无状态服务器的文件定位
23.20 对目录的操作
23.21 无状态地读目录
23.22 NFS服务器中的多个分层结构
23.23 装配协议
23.24 小结
进一步的研究
习题
第24章 网络文件系统协议(NFS,Mount)
24.1 引言
24.2 用RPC定义协议
24.3 用数据结构和过程定义协议
24.4 NFS的常量、类型和数据声明
24.4.1 NFS的常量
24.4.2 NFS的Typedef声明
24.4.3 NFS的数据结构
24.5 NFS的过程
24.6 NFS中的操作的语义
24.6.1 NFSPROC_NULL(过程0)
24.6.2 NFSPROC_GETATTR(过程1)
24.6.3 NFSPROC_SETATTR(过程2)
24.6.4 NFSPROC_ROOT(过程3)[在NFS3中已经不用了]
24.6.5 NFSPROC_LOOKUP(过程4)
24.6.6 NFSPROC_READLINK(过程5)
24.6.7 NFSPROC_READ(过程6)
24.6.8 NFSPROC_WRITECACHE(过程7)[在NFS3中已经不用了]
24.6.9 NFSPROC_WRITE(过程8)
24.6.10 NFSPROC_CREATE(过程9)
24.6.11 NFSPROC_REMOVE(过程10)
24.6.12 NFSPROC_RENAME(过程11)
24.6.13 NFSPROC_LINK(过程12)
24.6.14 NFSPROC_SYMLINK(过程13)
24.6.15 NFSPROC_MKDIR(过程14)
24.6.16 NFSPROC_RMDIR(过程15)
24.6.17 NFSPROC_READDIR(过程16)
24.6.18 NFSPROC_STATFS(过程17)
24.7 装配协议
24.7.1 装配协议的常量定义
24.7.2 装配协议的类型定义
24.7.3 装配协议的数据结构
24.8 装配协议中的过程
24.9 装配操作的语义
24.9.1 MNTPROC_NULL(过程0)
24.9.2 MNTPROC_MNT(过程1)
24.9.3 MNTPROC_DUMP(过程2)
24.9.4 MNTPROC_UMNT(过程3)
24.9.5 MNTPROC_UMNRALL(过程4)
24.9.6 MNTPROC_EXPORT(过程5)
24.10 NFS和装配的鉴别
24.11 NFS版本3中的变化
24.12 小结
进一步的研究
习题
第25章 TELNET客户端(程序结构)
25.1 引言
25.2 概述
25.2.1 用户终端
25.2.2 命令和控制信息
25.2.3 终端、窗口和文件
25.2.4 对并发性的需要
25.2.5 TELNET客户端的线程模型
25.3 TELNET客户端的算法
25.4 Windows中的键盘I/0
25.5 键盘控制中使用的全局变量
25.6 初始化键盘线程
25.7 有限状态机的特点
25.8 ELNET数据流中内嵌的命令
25.9 选项协商
25.10 请求/提供的对称
25.11 TELNET字符定义
25.12 从服务器来的数据的有限状态机
25.13 状态之间的转换
25.14 实现有限状态机
25.15 紧凑的FSM表达
25.16 在运行时维持紧凑表示
25.17 实现紧凑表示
25.18 构造FSM转移矩阵
25.19 套接字输出的有限状态机
25.20 套接字输出FSM的定义
25.21 选项子协商的有限状态机
25.22 选项子协商FSM的定义
25.23 初始化FSM
25.24 TELNET客户端的参数
25.25 TELNET客户端的核心
25.26 TELNET的同步
25.27 处理严重的错误
25.28 实现主FSM
25.29 立即断开连接的过程
25.30 中止过程
25.31 小结
进一步的研究
习题
第26章 TELNET客户端(实现细节)
26.1 引言
26.2 有限状态机的动作过程
26.3 记录选项请求的类型
26.4 执行空操作
26.5 响应针对回显选项的WILL/WONT
26.6 发送响应
26.7 响应针对不被支持选项的WILL/WONT
26.8 响应针对No Go.Ahead选项的WILL/WONT
26.9 为一进制传输生成D0/DONT
26.10 响应针对不被支持选项的DO/DONT
26.11 响应针对传输_进制选项的DO/DONT
26.12 响应针对终端类型选项的DO/DONT
26.13 选项的子协商
26.14 发送终端类型信息
26.15 中止子协商
26.16 向服务器发送一个字符
26.17 在用户终端上显示传入的数据
26.18 将一块数据写到服务器中
26.19 与本地客户端的交互
26.20 对非法命令的响应
26.2l 抄写脚本到文件
26.22 抄写脚本的实现
26.23 抄写脚本的仞始化
26.24 收集脚本文件名的字符
26.25 打开脚本文件
26.26 中止抄写脚本
26.27 打印状态信息
26.28 小结
进一步的研究
习题
第27章 将服务器程序从UNIX移植到WINDOWS
27.1 引言
27.2 后台操作
27.3 共享描述符和继承
27.4 控制TTY
27.5 工作目录
27.6 建立文件和Umask
27.7 进程组
27.8 标准I/0描述符
27.9 服务器互斥
27.10 记录进程ID
27.11 等待一个子进程退出
27.12 使用系统日志设施
27.13 其他的不兼容
27.14 小结
进一步的研究
习题
第28章 客户一服务器系统中的死锁和饿死
28.1 引言
28.2 死锁的定义
28.3 死锁检测的难度
28.4 避免死锁
28.5 单个客户端和服务器问的死锁
28.6 在单个交互中避免死锁
28.7 一组客户端和单个服务器之间的饿死
28.8 忙连接和饿死
28.9 避免阻塞的操作
28.10 线程、连接和其他限制
28.11 客户端和服务器的循环
28.12 给依赖性建立文档
28.13 小结
进一步的研究
习题
附录A 套接字使用的函数和库例程
附录B Windows套接字描述符的操作
参考文献

本目录推荐