图书介绍
TCP/IP网络互联技术 卷3 客户-服务器编程与应用 Windows套接字版PDF|Epub|txt|kindle电子书版本网盘下载
![TCP/IP网络互联技术 卷3 客户-服务器编程与应用 Windows套接字版](https://www.shukui.net/cover/54/33129430.jpg)
- (美)Douglas E.Comer,(美)David L.Stevens著;张卫,王能译 著
- 出版社: 北京:清华大学出版社
- ISBN:7302093792
- 出版时间:2004
- 标注页数:446页
- 文件大小:18MB
- 文件页数:472页
- 主题词:计算机网络-通信协议-教材;网络服务器-应用软件-程序设计-教材
PDF下载
下载说明
TCP/IP网络互联技术 卷3 客户-服务器编程与应用 Windows套接字版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
1.1 TCP/IP的应用1
1.2分布式环境下应用程序的设计1
第1章 概述1
1.4使用标准应用协议的例子2
1.3标准和非标准的应用协议2
1.6 用TELNET访问其他服务3
1.5 telnet连接的例子3
1.7应用协议和软件的灵活性4
1.8从提供者的角度看服务5
习题6
进一步的研究6
1.9本书的其余部分6
1.10小结6
2.2动机8
2.1 简介8
第2章 客户-服务器模型和软件的设计8
2.3.2特权和复杂性9
2.3.1 客户端和服务器9
2.3术语和概念9
2.3.4客户端的参数化10
2.3.3标准和非标准的客户端软件10
2.3.5无连接的与面向连接的服务11
2.3.7有状态的文件服务器例子12
2.3.6无状态与有状态的服务器12
2.3.8无状态是一个协议问题14
2.4 小结15
2.3.9充当客户端的服务器15
习题16
进一步的研究16
3.2网络中的并发17
3.1 引言17
第3章 客户-服务器软件的并发处理17
3.3服务器中的并发18
3.4.1进程的概念19
3.4术语和概念19
3.4.2线程20
3.4.4过程调用21
3.4.3程序和线程21
3.5.1 一个顺序执行的C的示例22
3.5一个创建并发线程的例子22
3.5.2程序的并发版本23
3.5.3 时间片25
3.6分离的线程26
3.8并发和异步I/O27
3.7上下文切换和协议软件设计27
3.9 UNIX下的并发28
3.10执行一个单独编译的程序29
习题30
进一步的研究30
3.11 小结30
4.2 宽松定义的协议软件接口32
4.1 引言32
第4章 协议的程序接口32
4.4概念性接口的规范33
4.3接口功能33
4.5 API的实现34
4.7 ANSIC中提供的基本I/O函数36
4.6 网络通信的两种基本方法36
4.8 UNIX套接字API的历史37
习题38
进一步的研究38
4.9 小结38
5.2套接字的历史40
5.1 简介40
第5章 套接字API40
5.4.1 套接字描述符41
5.4套接字的抽象41
5.3 一个协议接口的制订41
5.4.2套接字的系统数据结构42
5.5指定端点地址43
5.4.3使用套接字43
5.6 通用地址结构44
5.7套接字API中的函数45
5.7.5 send函数46
5.7.4 connect函数46
5.7.1 WSAStartup函数46
5.7.2 WSACleanup函数46
5.7.3 Socket函数46
5.7.8 bind函数47
5.7.7 closesocket函数47
5.7.6 recv函数47
5.7.11 TCP套接字调用小结48
5.7.10 accept调用48
5.7.9 listen函数48
5.9程序中使用套接字调用49
5.8 用于整数转换的实用例程49
5.10用作套接字调用参数的符号常量50
习题51
进一步的研究51
5.11 小结51
6.2学习算法而不研究细节53
6.1 引言53
第6章 客户软件设计中的算法和问题53
6.4标识服务器的地址54
6.3客户体系结构54
6.5分析地址参数55
6.6 查找域名56
6.7 由名字查找熟知端口57
6.9 由名字查找协议58
6.8 端口号和网络字节顺序58
6.11分配套接字59
6.10 TCP客户算法59
6.13选择本地 IP地址的一个基本问题60
6.12选择本地协议端口号60
6.15 使用TCP和服务器通信61
6.14 将TCP套接字连接到服务器61
6.16 从TCP连接上读取响应62
6.17.2部分关闭的操作63
6.17.1需要部分关闭63
6.17 关闭TCP连接63
6.19面向连接的和无连接的UDP套接字64
6.18 UDP客户端的编程64
6.23 对UDP的部分关闭65
6.22关闭使用UDP的套接字65
6.20 对UDP使用connect65
6.21 使用UDP和服务器通信65
6.25小结66
6.24关于UDP不可靠性的警告66
习题67
进一步的研究67
7.3 隐藏细节68
7.2小例子的重要性68
第7章 客户软件举例68
7.1 引言68
7.4客户程序的过程库例子69
7.6 ConUPD的实现70
7.5 ConTCP的实现70
7.7用来建立连接的过程71
7.9 DAYTIME服务74
7.8使用例子库74
7.10 DAYTIME的TCP客户实现75
7.11 从TCP连接上读取数据76
7.13 访问TIME服务77
7.12TIME服务77
7.15 TIME服务的UDP客户78
7.14精确的时间和网络时延78
7.16 ECHO服务80
7.17 ECHO服务的TCP客户81
7.18 ECHO 服务的UDP客户83
进一步的研究85
7.19 小结85
习题86
8.3并发服务器和循环服务器87
8.2概念性的服务器算法87
第8章 服务器软件设计的算法和问题87
8.1 引言87
8.5面向连接的服务器88
8.4 面向连接的访问和无连接的访问88
8.6无连接的服务器89
8.8优化无状态服务器90
87 故障、可靠性和无状态90
8.9 四种基本类型的服务器92
8.10请求处理时间93
8.13用INADDR_ANY绑定熟知地址94
8.12循环的、面向连接的服务器算法94
8.11循环服务器的算法94
8.16循环的、无连接的服务器算法95
8.15接受连接并使用这些连接95
8.14 将套接字设置为被动模式95
8.17在无连接的服务器上构造响应地址96
8.19主线程和子线程97
8.18并发服务器的算法97
8.21 并发的、面向连接的服务器算法98
8.20并发的、无连接的服务器的算法98
8.23使用单个线程实现表面上的并发性99
8.22用分离的程序作为子进程99
8.24各服务器类型的使用场合100
8.25.4并发的、面向连接的服务器101
8.25.3并发的、无连接的服务器101
8.25服务类型小结101
8.25.1循环的、无连接的服务器101
8.25.2循环的、面向连接的服务器101
8.26重要的服务器死锁的问题102
进一步的研究103
8.28小结103
8.27其他的实现方法103
习题104
9.2创建被动套接字105
9.1 引言105
第9章 循环无连接服务器(UDP)105
9.3 线程结构108
9.4 TIME服务器举例109
习题111
进一步的研究111
9.5小结111
10.2 分配被动的TCP套接字112
10.1 引言112
第10章 循环的、面向连接的服务器(TCP)112
10.4 线程结构113
10.3实现DAYTIME服务的服务器113
10.5 DAYTIME服务器举例114
10.6关闭连接116
10.8 小结117
10.7 连接终止和服务器的脆弱性117
习题118
进一步的研究118
11.2 并发ECHO119
11.1 引言119
第11章 并发的、面向连接的服务器(TCP)119
11.4 线程结构120
11.3 循环的实现和并发的实现的比较120
11.5 并发的ECHO服务器举例121
习题124
进一步的研究124
11.6小结124
12.2服务器中的数据驱动处理125
12.1 引言125
第12章 单线程、并发服务器(TCP)125
12.4 单线程服务器的线程结构126
12.3 单线程的数据驱动处理126
12.5 单线程ECHO服务器举例127
习题130
进一步的研究130
12.6小结130
13.2减少服务器数量的动机132
13.1引言132
第13章 多协议服务器(TCP,UDP)132
13.4线程结构133
13.3 多协议服务器的设计133
13.5多协议DAYTIME服务器举例134
13.7并发的多协议服务器137
13.6共享代码的概念137
习题138
进一步的研究138
13.8小结138
14.2服务器程序的合并139
14.1 引言139
第14章 多服务服务器(TCP,UDP)139
14.4面向连接的、多服务服务器的设计140
14.3 无连接的、多服务服务器的设计140
14.5 并发的、面向连接的、多服务服务器141
14.6单线程多服务服务器的实现142
14.7 多服务服务器对其他单独程序的调用143
14.9 一个多服务服务器的例子144
14.8多服务、多协议设计144
14.10静态的和动态的服务器配置150
14.11 一个超级服务器的例子,Inetd151
习题153
进一步的研究153
14.12小结153
15.2 在循环设计和并发设计之间做出选择155
15.1引言155
第15章 服务器并发性的统一高效管理155
15.4需求驱动的并发156
15.3并发等级156
15.7小时延会出问题157
15.6额外开销和时延157
15.5 并发的代价157
15.8.1预分配技术159
15.8线程预分配159
15.8.2面向连接的服务器的预分配160
15.8.4 预分配、突发通信量和NFS161
15.8.3无连接服务器的预分配161
15.9延迟的线程分配162
15.8.5 多处理器上的预分配162
15.10两种技术统一的基础163
15.12小结164
15.11 两种技术的结合164
习题165
进一步的研究165
16.2并发的优点166
16.1 引言166
第16章 客户端的并发166
16.4与多个服务器的并发联系167
16.3运行控制的动机167
16.5实现并发的客户端168
16.6单线程实现169
16.7 使用ECHO的并发客户端例子170
16.8并发客户端的执行175
16.10输出举例176
16.9计时器的管理176
习题177
16.12小结177
16.11例子代码中的并发性177
17.2多协议环境179
17.1 引言179
第17章 传输层和应用层的隧道技术179
17.3混合各种网络技术180
17.4动态电路分配181
17.5封装和隧道技术182
17.7客户端和服务器之间的应用层隧道技术183
17.6通过IP互联网的隧道技术183
17.8隧道技术、封装以及拨号电话线184
进一步的研究185
17.9小结185
习题186
18.2.1 多重技术的现实187
18.2受限环境中的客户端与服务器187
第18章 应用层网关187
18.1 引言187
18.3使用应用网关188
18.2.3 安全性引发的连通性约束188
18.2.2功能有限的计算机188
18.4通过邮件网关的交互189
18.6应用网关和隧道技术的比较190
18.5邮件网关的实现190
18.7应用网关和功能受限的系统192
18.8为了安全性使用的应用网关193
18.9应用网关和额外跳问题194
18.10 一个应用网关的例子195
18.11 基于Web的应用网关的细节196
18.12调用CGI程序197
18.14通用的应用网关198
18.13 RFC应用网关的URL198
18.16 SLIRP如何处理连接199
18.15 SLIRP的运行199
18.17 IP寻址与SLIRP200
进一步的研究201
18.18 小结201
习题202
19.2计算机中数据的表示203
19.1 引言203
第19章 外部数据表示(XDR)203
19.3 N平方转换问题204
19.4网络标准字节序205
19.6 XDR数据类型206
19.5外部数据表示事实上的标准206
19.9 XDR库例行程序207
19.8 使用XDR的软件支持207
19.7 隐含类型207
19.10一次一部分地构建报文208
19.11 XDR库的转换例行程序209
19.12 XDR流、I/O和TCP210
19.14小结211
19.13 记录、记录边界和数据报I/O211
习题212
进一步的研究212
20.3构建分布式程序的两种模式213
20.2 远程过程调用模型213
第20章 远程过程调用(RPC)的概念213
20.1 引言213
20.4常规过程调用的概念模型214
20.6常规过程调用的执行和返回215
20.5 过程模型的扩充215
20.7分布式系统中的过程模型216
208客户-服务器和RPC的相似性217
20.10 Sun Microsystems的远程过程调用定义218
20.9作为程序的分布式计算218
20.12减少参数的数量219
20.11 远程程序和过程219
20.13标记远程程序和过程220
20.14 适应远程程序的多个版本221
20.17 至少一次语义222
20.16 通信语义222
20.15 远程程序中的过程互斥222
20.18 RPC重传223
20.20 动态端口映射224
20.19把远程程序映射到协议端口224
20.21 RPC端口映射器算法225
20.22 RPC消息格式226
20.23为远程过程排列参数227
20.24 身份认证228
20.26认证字段的例子229
20.25 RPC消息表示的例子229
20.27小结230
习题231
进一步的研究231
21.2用使用远程过程调用232
21.1引言232
第21章 分布式程序的生成(Rpcgen概念)232
21.3支持RPC的编程机制233
21.4将程序分割成本地过程和远程过程234
21.6桩(stub)过程235
21.5为 RPC增加代码235
21.8客户端的桩过程名称236
21.7多个远程过程和分发236
21.9使用Rpcgen生成分布式程序237
21.10 Rpcgen输出和接口过程238
21.12使用Rpcgen构建客户端和服务器239
21.11 Rpcgen的输入和输出239
进一步的研究240
21.13小结240
习题241
22.3查询字典242
22.2 举例说明Rpcgen242
第22章 分布式程序的生(Rpcgen的例子)242
22.1 引言242
22.4建立分布式程序的八个步骤243
22.5步骤1:建立常规应用程序244
22.6 步骤2:将程序分割成两部分248
22.7步骤3:创建Rpcgen规范254
22.8步骤4:运行Rpcgen255
22.9 Rpcgen生成的.h文件256
22.10 Rpcgen生成的XDR转换文件257
22.11 Rpcgen生成的客户端代码258
22.12 Rpcgen生成的服务器代码260
22.13.1客户端接口例程263
22.13步骤5:编写桩接口过程263
22.13.2客户端接口例程265
22.14步骤6:编译链接客户端程序267
22.15步骤7:编译链接服务器程序270
22.17小结272
22.16步骤8:启动服务器和运行客户端272
习题273
进一步的研究273
23.2远程文件访问与文件传输274
23.1 引言274
第23章 网络文件系统(NFS)的概念274
23.5无状态的服务器275
23.4异构计算机之间的文件访问275
23.3对远程文件的操作275
23.7.2无记录边界的字节序列276
23.7.1基本定义276
23.6 NFS和UNIX文件语义276
23.7 UNIX文件系统概述276
23.7.4保护和访问277
23.7.3文件的拥有者和组标识符277
23.7.6 UNIX中的数据传输278
23.7.5 UNIX中的打开-读-写-关闭范例278
23.7.8 UNIX中的随机访问279
23.7.7搜索目录的权限279
23.7.10 UNIX文件位置和并发访问280
23.7.9搜索超过UNIX文件结尾280
23.7.12 UNIX中的文件名和路径281
23.7.11 并发访问时的写操作的语义281
23.7.13 UNIX索引节点:存储在文件中的信息282
23.7.14 UNIX中的Stat操作283
23.7.16装配UNIX文件系统284
23.7.15 UNIX的文件命名机制284
23.7.18 UNIX符号链接286
23.7.17 UNIX文件名解析286
23.9 NFS文件类型287
23.8 NFS下的文件287
23.10 NFS文件模式288
23.12 NFS的客户端和服务器289
23.11 NFS文件属性289
23.14 NFS的客户端和UNIX291
23.13 NFS客户端的操作291
23.15 NFS的装配(Mounts)292
23.17 NFS句柄取代路径名293
23.16文件句柄293
23.18 Windows下的NFS客户端294
23.20对目录的操作295
23.19无状态服务器的文件定位295
23.22 NFS服务器中的多个分层结构296
23.21无状态地读目录296
23.24小结297
23.23装配协议297
习题298
进一步的研究298
24.2用RPC定义协议300
24.1 引言300
第24章 网络文件系统协议(NFS,Mount)300
24.4.1 NFS的常量301
24.4 NFS的常量、类型和数据声明301
24.3用数据结构和过程定义协议301
24.4.2 NFS的Typedef声明302
24.4.3 NFS的数据结构303
24.5 NFS的过程305
24.6.5 NFSPROC_LOOKUP(过程4)306
24.6.4 NFSPROC_ROOT(过程3)[在NFS3中已经不用了]306
24.6 NFS中的操作的语义306
24.6.1 NFSPROC_NULL(过程0)306
24.6.2 NFSPROC_GETATTR (过程1)306
24.6.3 NFSPROC_SETATTR(过程2)306
24.6.11 NFSPROC_REMOVE (过程10)307
24.6.10 NFSPROC_CREATE(过程9)307
24.6.6 NFSPROC_READLINK(过程5)307
24.6.7 NFSPROC_READ(过程6)307
24.6.8 NFSPROC_WRITECACHE(过程7)[在NFS3中已经不用了]307
24.6.9 NFSPROC_WRITE (过程8)307
24.6.17 NFSPROC_READDIR(过程16)308
24.6.16 NFSPROC_RMDIR(过程15)308
24.6.12 NFSPROC_RENAME (过程11)308
24.6.13 NFSPROC_LINK(过程12)308
24.6.14 NFSPROC_SYMLINK(过程13)308
24.6.15 NFSPROC_MKDIR(过程14)308
24.7.1 装配协议的常量定义309
24.7装配协议309
24.6.18 NFSPROC_STATFS(过程17)309
24.7.3装配协议的数据结构310
24.7.2装配协议的类型定义310
24.8装配协议中的过程311
24.9.4 MNTPROC_UMNT(过程3)312
24.9.3 MNTPROC_DUMP(过程2)312
24.9装配操作的语义312
24.9.1 MNTPROC_NULL(过程0)312
24.9.2 MNTPROC_MNT(过程1)312
24.10 NFS和装配的鉴别313
24.9.6 MNTPROC_EXPORT(过程5)313
24.9.5 MNTPROC_UMNTALL(过程4)313
24.11 NFS版本3中的变化314
24.12 小结315
习题316
进一步的研究316
25.2.1用户终端317
25.2概述317
第25章 TELNET客户端(程序结构)317
25.1 引言317
25.2.4对并发性的需要318
25.2.3终端、窗口和文件318
25.2.2命令和控制信息318
25.3 TELNET客户端的算法319
25.2.5 TELNET客户端的线程模型319
25.4 Windows中的键盘I/O320
25.5键盘控制中使用的全局变量321
25.6初始化键盘线程322
25.8 ELNET数据流中内嵌的命令325
25.7有限状态机的特点325
25.10请求/提供的对称326
25.9选项协商326
25.11 TELNET字符定义327
25.12从服务器来的数据的有限状态机328
25.13状态之间的转换329
25.14实现有限状态机330
25.15紧凑的FSM表达331
25.17实现紧凑表示332
25.16在运行时维持紧凑表示332
25.18构造FSM转移矩阵334
25.19套接字输出的有限状态机335
25.20套接字输出FSM的定义337
25.21选项子协商的有限状态机338
25.22选项子协商FSM的定义339
25.23初始化FSM340
25.24 TELNET客户端的参数341
25.25 TELNET客户端的核心342
25.26 TELNET的同步345
25.28实现主FSM346
25.27处理严重的错误346
25.29 立即断开连接的过程347
25.30 中止过程348
进一步的研究349
25.31 小结349
习题350
26.3记录选项请求的类型351
26.2有限状态机的动作过程351
第26章 TELNET客户端(实现细节)351
26.1引言351
26.4执行空操作352
26.5 响应针对回显选项的WILL/WONT353
26.6发送响应354
26.7 响应针对不被支持选项的WILL/WONT355
26.8 响应针对No Go-Ahead选项的WILL/WONT356
26.9 为二进制传输生成DO/DONT357
26.10 响应针对不被支持选项的DO/DONT358
26.11 响应针对传输二进制选项的DO/DONT359
26.12 响应针对终端类型选项的DO/DONT360
26.13选项的子协商362
26.14发送终端类型信息363
26.15 中止子协商364
26.16向服务器发送一个字符365
26.17在用户终端上显示传入的数据366
26.18将一块数据写到服务器中369
26.19与本地客户端的交互370
26.21 抄写脚本到文件371
26.20对非法命令的响应371
26.23抄写脚本的初始化372
26.22抄写脚本的实现372
26.24收集脚本文件名的字符373
26.25 打开脚本文件374
26.26中止抄写脚本375
26.27打印状态信息377
进一步的研究378
26.28 小结378
习题379
27.2后台操作380
27.1 引言380
第27章 将服务器程序从UNIX移植到WINDOWS380
27.3共享描述符和继承381
27.5工作目录382
27.4 控制TTY382
27.7进程组383
27.6建立文件和Umask383
27.9服务器互斥384
27.8标准I/O描述符384
27.11 等待一个子进程退出385
27.10记录进程ID385
27.12使用系统日志设施386
27.13其他的不兼容387
27.14小结388
习题389
进一步的研究389
28.2死锁的定义390
28.1引言390
第28章 客户-服务器系统中的死锁和饿死390
28.4避免死锁391
28.3死锁检测的难度391
28.6在单个交互中避免死锁392
28.5单个客户端和服务器间的死锁392
28.8忙连接和饿死393
28.7一组客户端和单个服务器之间的饿死393
28.10线程、连接和其他限制394
28.9避免阻塞的操作394
28.11 客户端和服务器的循环395
28.12给依赖性建立文档396
习题397
进一步的研究397
28.13 小结397
附录A 套接字使用的函数和库例程399
附录B Windows套接字描述符的操作433
参考文献436