第一部分 基础篇 3
第1章 因特网概述 3
1.1 因特网的历史 3
1.2 因特网协议和地址 4
1.3 因特网体系结构 4
1.4 因特网的组织机构 5
1.5 因特网的评议征求(RFC) 6
第2章 TCP/IP协议 8
2.1 OSI网络分层参考模型 8
2.2 TCP/IP分层模型 10
2.3.1 地址基本编码格式 11
2.3 IP地址 11
2.3.2 子网掩码 12
2.3.3 特殊用途的IP地址 14
2.4 网络数据的传输次序 15
2.5 网间协议(IP) 15
2.5.1 IP数据报格式 15
2.5.2 版本协议号 17
2.5.3 数据报长度和填充域 17
2.5.4 服务类型和优先权 17
2.5.5 标识符、标志和分片偏移量 18
2.5.6 存活时间 18
2.5.8 报头校验和 19
2.5.9 源地址和目的地址 19
2.5.7 协议序列号 19
2.5.10 IP选项 20
2.6 校验和差错检测 20
2.7 网间控制报文协议(ICMP) 22
2.7.1 ICMP报文格式 23
2.7.2 目的不可达报文 24
2.7.3 拥塞控制与源站点抑制报文 24
2.7.4 路径控制与重定向报文 25
2.7.5 Ping与回响请求/应答报文 26
2.7.6 信息请求/应答报文 26
2.7.7 时序管理与时戳请求/应答报文 27
2.7.8 地址掩码请求/应答报文 27
2.7.9 路由器请求/广告报文 28
2.7.10 数据报参数错报文 29
2.7.11 路由跟踪与数据报超时报文 29
2.8 用户数据报协议(UDP) 30
2.8.1 UDP数据报格式 30
2.8.2 UDP校验和与伪头标 31
2.8.3 UDP端口 31
2.9 传输控制协议(TCP) 32
2.9.1 TCP段格式 33
2.9.2 TCP段长度的确定 34
2.9.3 紧急数据发送和推操作 35
2.9.4 面向连接和端口复用 35
2.9.5 TCP校验和与伪头标 36
2.9.6 连接的建立和关闭 37
2.9.7 累计确认和重传 38
2.9.8 超时和重传 39
2.9.9 滑动窗口和数据缓冲 40
2.9.10 流量和拥塞控制 41
2.10 地址解析 42
2.10.1 ARP/RARP报文格式 43
2.10.2 ARP实现 44
2.10.3 RARP实现 44
2.11 域名服务(DNS) 45
2.11.1 因特网域名结构 45
2.11.2 域名解析 46
2.11.3 优化域名服务器性能 47
2.11.4 域名服务器报文 48
2.12 应用层协议 50
第3章 客户机/服务器编程设计 52
3.1 TCP/IP协议软件功能回顾 52
3.2 应用程序的功能 52
3.3 客户机和服务器 53
3.4 服务器的并发处理 55
3.5 循环处理的UDP服务器 56
3.6 消息驱动的并发TCP服务器 57
3.7 多线程并发TCP服务器 58
3.8 编写NT服务器程序 59
3.8.1 服务程序主函数 60
3.8.2 服务入口点函数 62
3.8.3 控制处理程序函数 63
3.8.4 安装服务程序 65
3.8.5 删除已安装的服务程序 68
第4章 套接字编程 71
4.1 套接字编程基础 71
4.2 套接字函数 72
4.2.1 函数概述 73
4.2.2 函数accept 73
4.2.3 函数bind 75
4.2.4 函数closesocket 75
4.2.5 函数connect 76
4.2.6 函数gethostbyaddr和gethostbyname 77
4.2.7 函数gethostname、getpeername和getsockname 78
4.2.8 函数getprotobyname和getprotobynumber 79
4.2.9 函数getservbyname和getservbyport 79
4.2.10 函数getsockopt和setsockopt 80
4.2.11 函数htonl、htons、ntohl和ntohs 82
4.2.12 函数inet-addr和inet-ntoa 83
4.2.13 函数ioctlsocket 83
4.2.14 函数listen 84
4.2.15 函数recv 85
4.2.16 函数recvfrom 86
4.2.17 函数select 87
4.2.19 函数sendto 89
4.2.18 函数send 89
4.2.21 函数socket 91
4.2.20 函数shutdown 91
4.3 编写Ping程序 92
4.3.1 创建程序框架 92
4.3.2 编辑程序资源 93
4.3.3 为控制添加成员变量 95
4.3.4 消息处理函数CPingDlg∷OnPing 96
4.3.5 函数CPingDlg∷PreparePing 98
4.3.6 消息处理函数CPingDlg∷OnTimer 100
4.3.7 报文分析函数CPingDlg∷Decode-Resp 102
4.3.8 其他辅助函数 103
4.4 编写Echo程序 105
4.3.9 运行Ping程序 105
4.4.1 创建程序框架 106
4.4.2 客户机程序main函数 106
4.4.3 客户机程序TestEcho函数 107
4.4.4 服务器程序main函数 109
4.4.5 服务器程序EchoService函数 110
4.4.6 运行程序UDPEchoServer和UDPEchoClient 111
第5章 MFC套接字类编程 113
5.1 CAsyncSocket类 113
5.2 CSocket类 124
5.3 错误返回码 126
5.4 编写Echo(TCP)客户机程序 127
5.4.1 创建程序框架 128
5.4.2 资源编辑 128
5.4.3 CConnectDlg类 130
5.4.4 CEchoClientSocket类 130
5.4.5 CTCPEchoClientView类 131
5.4.6 CMainFrame类 132
5.5编写Echo(TCP)服务器程序 136
5.5.1 创建程序框架 137
5.5.2 资源编辑 137
5.5.3 CEchoListenSocket类 137
5.5.4 CEchoServiceSocket类 138
5.5.5 CTCPEchoServerView类 140
第6章 MFC WinInet编程 144
6.1 MFC WinInet概述 144
6.2 CInternetSession类 145
6.3 CInternetConnection类 151
6.4 CFtpConnection类 152
6.5 CGopherConnection类 157
6.6 CHttpConnection类 159
6.7 CInternetFile类 160
6.8 CGopherFile类 163
6.9 CHttpFile类 164
6.10 CFileFind类 169
6.11 CFtpFileFind类 174
6.12 CGopherFileFind类 175
6.13 CGopherLocator类 176
6.14 编写WinInet应用程序 178
6.14.1 创建因特网会话 179
6.14.2 打开因特网文件 179
6.14.3 从服务器中读文件 179
6.14.4 关闭文件 179
6.14.5 关闭会话 180
6.14.6 完整的消息处理过程 180
7.1.2 数据格式 185
7.1.1 协议流程 185
7.1 Finger协议 185
第7章 Finger协议编程 185
第二部分 应用篇 185
7.1.3 查询格式 186
7.1.4 查询结果 186
7.2 编写Finger程序 186
7.3 创建程序框架 187
7.4 编辑资源 187
7.5 CFingerSocket类 188
7.6 CFingerView类 190
7.7 运行Finger程序 191
8.3 美化程序外观 192
8.2 编写Whois程序 192
第8章 Whois协议编程 192
8.1 Whois协议 192
8.4 给视增加编辑功能 193
8.5 运行Whois程序 196
第9章 FTP协议编程 197
9.1 Windows下的ETP应用程序 197
9.2 FTP协议概述 198
9.2.1 专用术语 198
9.2.2 FTP模式 200
9.3 数据传送功能 201
9.3.1 数据表示和数据存储 202
9.3.2 建立数据连接 205
9.3.4 传输模式 206
9.3.3 数据连接管理 206
9.3.5 错误恢复和重新启动 208
9.4 文件传送功能 209
9.4.1 FTP命令 209
9.4.2 FTP应答 214
9.5 FTP协议详细说明 216
9.5.1 最小实现 216
9.5.2 连接 217
9.5.3 命令 218
9.5.4 命令和应答 219
9.6 FTP客户机编程 223
9.6.1 程序说明 223
9.6.3 编辑资源 224
9.6.2 创建程序框架 224
9.6.4 CConnectDialog类 226
9.6.5 CFtpView类 227
9.6.6 CControlSocket类 238
9.6.7 CListeningSocket类 242
9.6.8 CDataSocket类 243
9.6.9 CTransportSocket类 244
9.6.10 CFtpDoc类 246
9.7 运行FTP客户程序 247
9.8 FTP服务器编程 249
9.8.1 程序说明 249
9.8.3 函数ServiceStart 250
9.8.2 创建程序框架 250
9.8.4 设置和获取服务根目录 254
9.8.5 函数CleanupThread 255
9.8.6 停止、暂停和继续服务 257
9.8.7 创建协议解释线程 257
9.8.8 协议解释线程 258
9.9 调试和运行FTP服务程序 269
第10章 HTTP协议编程 271
10.1 浏览Web站点 271
10.2 HTTP协议概述 272
10.3 协议参数 272
10.3.1 HTTP版本 272
10.3.2 统一资源标识符(URI) 273
10.3.3 日期/时间格式 274
10.3.4 内容编码 275
10.3.5 媒体类型 275
10.3.6 产品标记 275
10.4 HTTP消息 275
10.4.1 消息类型 275
10.4.2 消息头标 276
10.4.3 一般头标域 277
10.5 请求 277
10.5.1 Request-Line 277
10.6.1 Status-Line 278
10.6 应答 278
10.5.2 请求头标域 278
10.6.2 应答头标域 280
10.7 实体 280
10.7.1 实体头标域 280
10.7.2 实体主体 281
10.8 方法定义 281
10.9 头标域定义 282
10.10 编写HTTP客户程序 286
10.10.1 程序说明 286
10.10.2 创建程序框架 286
10.10.3 函数main 287
10.10.4 函数ParseOptions 291
10.10.5 函数StripTags 292
10.10.6 其他函数 293
10.11 运行HTTP客户程序 293
10.12 编写HTTP服务器程序 294
10.12.1 程序说明 294
10.12.2 创建程序框架 295
10.12.3 函数HttpServiceThread 295
10.12.4 函数ProcessRequest 296
10.12.5 函数GetRequest 299
10.12.6 其他函数 300
10.13 运行HTTP服务器程序 300
11.1 浏览Gopher站点 301
第11章 Gopher协议编程 301
11.2 Gopher协议概述 302
11.3 连接服务器 302
11.4 服务器应答 303
11.5 请求服务 303
11.6 编写Gopher客户程序 304
11.6.1 程序说明 304
11.6,2 创建程序框架 304
11.6.3 编辑资源 305
11.6,4 CConnectDialog类 306
11.6.5 CGopherClientApp类 307
11.6.6 CGopherListClientDoc和CGopherFileClientDoc类 309
11.6.7 CGopherListClientView类 310
11.6.8 CGopherFileClientView类 313
11.7 运行Gopher客户程序 315
第12章 IRC协议编程 316
12.1 IRC协议概述 316
12.2 IRC消息 317
12.3 IRC通信分类 319
12.4 IRC命令 320
12.4.1 连接注册 320
12.4.2 通道操作 323
12.4.3 服务器查询命令 328
12.4.4 发送消息 332
12.4.5 用户查询 333
12.4.6 杂项消息 334
12.4.7 可选消息 336
12.5 编写IRC客户程序 338
12.5.1 程序说明 339
12.5.2 创建程序框架 339
12.5.3 编辑资源 340
12.5.4 CCommandDialog类 343
12.5.5 CconnectDialog类 343
12.5.6 CJoinDialog类 344
12.5.7 CNicknameDialog类 344
12.5.8 CIRCClientApp类 344
12.5.9 CChildFrame类 351
12.5.10 CIRCClientDoc类 352
12.5.11 CIRCClientView类 354
12.5.12 CIRCClientSocket类 355
12.6 运行IRC客户程序 356
第13章 电子邮件协议编程 358
13.1 SMTP协议 358
13.1.1 协议概述 358
13.1.2 SMTP邮件处理 359
13.1.3 SMTP命令 360
13.1.4 SMTP应答 362
13.1.5 SMTP命令——应答序列 363
13.2 POP3协议 364
13.2.2 认可状态 365
13.2.1 协议概述 365
13.2.3 处理事务状态 366
13.2.4 更新状态 368
13.2.5 可选的POP3命令 368
13.3 邮件消息格式 370
13.4 编写电子邮件客户程序 371
13.4.1 程序说明 371
13.4.2 创建程序框架 372
13.4.3 编辑资源 372
13.4.4 对话框类CAccountDialog 374
13.4.5 CMailClientDoc类 374
13.4.6 CChildFrame类 376
13.4.7 CMailListClientView类 381
13.5 运行电子邮件客户程序 385
第14章 NNTP协议编程 387
14.1 NNTP协议概述 387
14.2 NNTP命令 387
14.3 NNTP应答 389
14.4 NNTP命令——应答示例 391
14.5 USENET文章格式 392
14.6 编写新闻阅读程序 393
14.6.1 程序说明 393
14.6.2 创建程序框架 394
14.6.3 编辑资源 394
14.6.5 对话框类CComposeDialog 397
14.6.4 对话框类CConfigDialog 397
14.6.6 CChildFrame类 401
14.6.7 CNNTPClientDoc类 402
14.6.8 CNNTPNewsgroupsView类 406
14.6.9 CNNTPNewsInfoView类 409
14.7 运行新闻阅读程序 412
第15章 Telnet协议编程 414
15.1 Telnet协议概述 414
15.2 网络虚拟终端 415
15.3 Telnet命令结构 415
15.4 编写Telnet服务器程序 416
15.4.1 程序说明 417
15.4.2 函数ProcesRequest 417
15.4.3 程序Console 420
15.5 运行Telnet服务器程序 421
第三部分 提高篇 425
第16章 下载整个Web站点 425
16.1 脱机浏览 425
16.2 提高下载速度 425
16.3 程序说明 426
16.4 类CHTTPDownload 426
16.5 运行程序 427
第17章 代理服务器 428
17.1 为什么需要代理服务器 428
17.2 代理服务器的原理 428
17.3 程序说明 429
17.4 运行程序 431
第18章 断点续传 432
18.1 断点续传功能的用途 432
18.2 FTP协议的断点续传 432
18.3 支持断点续传的FTP服务器 433
18.4 HTTP协议的断点续传 434
18.5 支持断点续传的HTTP服务器 435
第19章 CGI和ISAPI编程 437
19.1 编写CGI程序 437
19.2 在Web页中使用CGI程序 438
19.3 ISAPI编程 439
19.4 编写服务器扩展 440
19.5 在Web页中使用服务器扩展 443
19.6 调试服务器扩展动态库 445
19.7 编写过滤器 446
19.8 使用过滤器 450
附录 453
附录A 超文本标记语言 453
A.1 HTML标记 453
A.2 文档结构 453
A.3 文档头标 454
A.4 格式控制 454
A.5 列表 455
A.6 超级链接 456
A.7 内嵌图像 456
A.8 交互式用户接口 457
A.9 表格 458
附录B 多用途因特网邮件扩展 460
B.1 MIME版本 460
B.2 内容类型 460
B.3 编码 462
B.4 内容标识 464
B.5 内容描述 464
附录C 远程访问服务 465
C.1 远程访问服务函数 465
C.2 RAS客户程序示例 466
附录D 浏览光盘 469
D.1 程序源代码清单 469