图书介绍

TCP/IP网络互联技术 卷3 客户-服务器编程与应用 Windows套接字版PDF|Epub|txt|kindle电子书版本网盘下载

TCP/IP网络互联技术 卷3 客户-服务器编程与应用 Windows套接字版
  • (美)Douglas E.Comer,(美)David L.Stevens著;张卫,王能译 著
  • 出版社: 北京:清华大学出版社
  • ISBN:7302093792
  • 出版时间:2004
  • 标注页数:446页
  • 文件大小:18MB
  • 文件页数:472页
  • 主题词:计算机网络-通信协议-教材;网络服务器-应用软件-程序设计-教材

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

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

热门推荐