第1章 Internet基础 1
1.1 深入介绍 1
1.1.1 Java怎么样 1
1.1.2 协议包 2
1.1.3 Internet地址 2
1.1.4 DNS:Internet上的电话簿 3
1.1.5 URL,URI,URN 4
1.1.6 层(Layers) 5
1.1.7 基本协议 6
1.1.8 网络硬件 7
1.1.9 协议的学习 8
1.2 快速解决方案 9
1.2.1 确定你的真IP地址 9
1.2.2 使用动态重定向 9
1.2.3 确定IP地址的类型 10
1.2.4 选择端口号 10
1.2.5 使用Ping和其他工具 11
1.2.7 查找RFC 13
1.2.6 自己动手练习一个协议 13
1.2.8 为代理服务器设置Java 15
第2章 Java网络编程 16
2.1 深入介绍 16
2.1.1 套接字编程的实质 16
2.1.2 I/O(输入/输出)流 21
2.1.3 高级套接字方法 26
2.1.4 线程 29
2.2.2 向服务器端打开TCP套接字 32
2.2.1 解析主机名 32
2.2 快速解决方案 32
2.2.3 打开服务器端套接字 33
2.2.4 创建UDP套接字 33
2.2.5 向TCP套接字发送数据 34
2.2.6 从TCP套接字接收数据 34
2.2.7 压缩套接字数据 35
2.2.8 设定套接字的最长读时间 36
2.2.13 设定缓冲区的大小 37
2.2.12 设定保持活动选项 37
2.2.11 设定套接字的延时行为 37
2.2.9 设定服务器端最长接收时间 37
2.2.10 设定SoLinger 37
2.2.14 处理套接字异常 38
2.2.15 创建多线程服务器程序 38
2.2.16 自动处理多线程服务器 39
2.2.17 使用线程池为客户端程序服务 41
3.1 深入介绍 45
3.1.1 Echo协议 45
第3章 简单协议 45
3.1.2 Finger 49
3.1.3 Whois协议 57
3.1.4 基本时间协议(Basic Time) 59
3.2 快速解决方案 65
3.2.1 使用Echo协议 65
3.2.2 编写TCP Echo服务程序 65
3.2.3 编写UDP Echo服务程序 65
3.2.4 合并TCP和UDP服务程序 66
3.2.5 使用Finger服务 66
3.2.6 编写Finger服务器 67
3.2.7 创建一个简单的代理 68
3.2.8 使用Whois 69
3.2.9 查询对人可读格式的时间 69
3.2.10 对NIST时间串进行解码 69
3.2.11 查询机器可读格式中的时间 70
3.2.12 编写时间服务程序 71
3.2.13 选用Unicode作字节映射 72
第4章 TFTP协议 78
4.1 深入介绍 78
4.1.1 关于TFTP协议 79
4.1.2 Play by Play 81
4.1.3 TFTP客户端应用 81
4.1.4 TFTP服务器端应用 85
4.1.5 更简单的一种方法 88
4.1.6 TFTP与FTP的对比 89
4.2 快速解决方案 90
4.2.1 探寻TFTP的规范 90
4.2.2 创建一个TFTP类 90
4.2.5 使用GNU的TFTP类 100
4.2.3 创建一个TFTP的客户端应用程序 100
4.2.4 创建一个TFTP的服务器端应用程序 100
4.2.6 配置GNU的TFTP服务器 101
第5章 Telnet协议 102
5.1 深入介绍 102
5.1.1 Telnet回顾 103
5.1.2 NVT回顾 103
5.1.3 特殊命令 104
5.1.4 要协商的地方 105
5.1.5 Telnet实践 108
5.1.6 一个基本的Java客户端 109
5.1.7 创建一个Telnet服务器端应用 114
5.1.8 定制服务器端 120
5.1.9 Telnet开放源码 121
5.2 快速解决方案 123
5.2.1 探寻Telnet协议规范 123
5.2.5 防止循环 124
5.2.4 协商Telnet的选项 124
5.2.3 模拟NVT 124
5.2.2 发送Telnet命令同时发送数据 124
5.2.6 处理子选项 125
5.2.7 从基类创建一个Telnet客户端 125
5.2.8 从基类创建一个Telnet服务器端 126
5.2.9 使用TelnetWrapper 127
第6章 FTP协议 128
6.1 深入介绍 128
6.1.1 基础 128
6.1.2 传输 129
6.1.3 响应 130
6.1.4 登录 132
6.1.5 创建连接 132
6.1.6 FTP命令细节 134
6.1.7 考虑客户端 137
6.1.8 考虑服务器端 138
6.2 快速解决方案 146
6.2.1 查找FTP规范 146
6.2.2 连接到FTP服务器 146
6.2.4 管理当前目录 147
6.2.3 解释FTP的响应 147
6.2.5 读文件目录 148
6.2.6 传输文件 151
6.2.7 选择主动方式还是被动方式 152
6.2.8 使用FTP的开放源码 153
第7章 SMTP协议 155
7.1 深入介绍 155
7.1.1 验证 157
7.1.2 超时、多行和透明性 157
7.1.3 扩展的SMTP 158
7.1.4 题头 158
7.1.5 编码 159
7.1.6 实现 160
7.1.7 使用SMTP 174
7.1.8 附件 176
7.2.1 探寻SMTP规范 177
7.2.2 连接一个SMTP服务器 177
7.2 快速解决方案 177
7.1.9 SMTP的问题(Twists) 177
7.2.3 通过SMTP发送邮件 178
7.2.4 解释响应码 178
7.2.5 形成地址 179
7.2.6 选择题头 180
7.2.7 格式化消息文本 180
7.2.8 使用可引用可打印编码对消息文本编码 181
7.2.9 使用Base 64编码对消息文本编码 182
7.2.10 格式化多部分消息 184
7.2.11 使用MailMessage对象 185
7.2.12 使用SMTP对象 186
第8章 POP3协议 187
8.1 深入介绍 187
8.1.1 POP3协议 188
8.1.2 一个POP3类 190
8.1.3 一个常用列表管理器 190
8.1.4 代码 191
8.1.5 作用 197
8.1.6 进一步开发 197
8.1.8 使用JavaMail 198
8.1.7 关于IMAP 198
8.2 快速解决方案 199
8.2.1 探寻POP3协议规范 199
8.2.2 探寻IMAP规范 199
8.2.3 解释POP3服务器的响应 199
8.2.4 使用POP3授权 199
8.2.5 了解邮箱状态 200
8.2.6 确定消息细节 200
8.2.9 创建一个POP3客户端类 201
8.2.8 删除一个消息 201
8.2.7 读一个邮件消息 201
8.2.10 使用com.jthomas.pop包 205
8.2.11 安装JavaMail 206
8.2.12 使用JavaMail Message对象工作 206
8.2.13 使用JavaMail Session对象工作 207
8.2.14 在POP邮件服务器中使用JavaMail 207
8.2.15 在IMAP邮件服务器中使用JavaMail 209
9.1 深入介绍 211
9.1.1 关于News 211
第9章 NNTP协议 211
9.1.2 NNTP内幕 212
9.1.3 封装NNTP 215
9.1.4 Web上的NNTP 221
9.2 快速解决方案 222
9.2.1 探寻NNTP规范 222
9.2.2 连接一个News服务器 222
9.2.4 列出所有的组 223
9.2.5 寻找新组 223
9.2.3 选择一个组 223
9.2.6 读取文章 224
9.2.7 改变当前的文章 224
9.2.8 查找新文章 225
9.2.9 投递文章 225
9.2.10 使用NewsClient类 225
9.2.11 显示Web上的文章 226
9.2.12 读Web上的文章 228
9.2.13 通过Web投递文章 230
10.1.1 HTTP协议 232
第10章 HTTP客户端 232
10.1 深入介绍 232
10.1.2 状态码 235
10.1.3 常用标题 236
10.1.4 表单 237
10.1.5 Cookies 239
10.1.6 Applets(小程序) 248
10.2.3 创建1.0版的请求 257
10.2.2 创建简单请求 257
10.2.1 探寻HTTP协议规范 257
10.2 快速解决方案 257
10.2.4 创建1.1版的请求 258
10.2.5 读状态码 259
10.2.6 通过HTML向服务器发送表单数据 259
10.2.7 使用Java发送表单数据到服务器 260
10.2.8 URL数据编码 260
10.2.9 自动提交表单 261
10.2.10 发送和接收Cookies 262
10.2.12 检查合法链接 263
10.2.11 打开浏览器到浏览器的通信 263
11.1 深入介绍 268
11.1.1 URL内幕 268
第11章 协议操作者 268
11.1.2 URLConnection内幕 269
11.1.3 URLConnection子类 271
11.1.4 协议和内容操作者 272
11.2 快速解决方案 275
11.2.1 获取URL的数据 275
11.2.3 设置请求标题 276
11.2.2 获取URL的内容 276
11.2.4 读取响应标题 277
11.2.5 使用特定的HTTP连接 277
11.2.6 传送数据到服务器 277
11.2.7 打开一个JAR文件作为URL 278
11.2.8 创建一个客户协议操作者 279
11.2.9 安装一个客户协议操作者 280
11.2.10 创建一个客户内容操作者 281
11.2.11 安装一个客户内容操作者 282
第12章 解释HTML 284
12.1 深入介绍 284
12.1.1 显示 284
12.1.2 处理HTML 286
12.1.3 实现Ad Hoc 287
12.1.4 Ad Hoc细节 289
12.1.5 使用AHParse 290
12.1.7 属性解析 293
12.1.6 处理图像 293
12.1.8 改进可用性 294
12.1.9 再次访问Swing 296
12.2 快速解决方案 298
12.2.1 通过Swing使用HTML 298
12.2.2 使用JEditorPane显示HTML 298
12.2.3 通过超链接显示HTML 299
12.2.4 使用AHParse 299
12.2.5 通过Swing解析标签 299
12.2.7 通过Swing解析文本 301
12.2.6 通过Swing解析属性 301
第13章 HTML服务 302
13.1 深入介绍 302
13.1.1 关于JSP 302
13.1.2 定制Tandem中的服务 308
13.1.3 通过代理创建的Web 317
13.1.4 拍卖服务器 324
13.2.1 使用JSP进行服务器端编程 337
13.2.2 从JSP中读输出 337
13.2 快速解决方案 337
13.2.3 在JSP中向浏览器写数据 338
13.2.4 使用JSP页的定向功能 338
13.2.5 写一个简单的Web服务器程序 338
13.2.6 配置HttpServer(Http服务器) 339
13.2.7 定制HttpServer 339
13.2.8 写一个代理服务器 342
13.2.9 调试一个代理服务器 343
第14章 XML 346
14.1 深入介 346
14.1.1 进入XML 347
14.1.2 XML语 348
14.1.3 有效的 349
14.1.4 文档对象模型(DOM) 351
14.1.5 名字空间 351
14.1.6 Java对XML的支持 352
14.1.7 XML库 354
14.1.8 使用SAX 355
14.1.9 使用DOM 366
14.2.2 在JSP里创建XML 372
14.2 快速解决方案 372
14.2.1 安装Java XML扩展 372
14.2.3 创建一个解析器 374
14.2.4 创建一个验证解析器 374
14.2.5 创建一个理解命名的解析器 374
14.2.6 使用一个SAX解析器 375
14.2.7 使用SAX进行验证 375
14.2.8 在XML文件里创建DOM 376
14.2.9 读属性 376
14.2.10 构造一个DOM 377
14.2.11 编写一个DOM 378
第15章 安全性略谈 382
15.1 深入介绍 382
15.1.1 加密技术回顾 383
15.1.2 Java安全性 385
15.1.3 关于证书 386
15.1.4 隐藏数据 387
15.2.2 创建一个安全套接字 395
15.2.3 与一个安全的Web服务器相连接 395
15.2.1 创建一个安全的套接字工厂 395
15.2 快速解决方案 395
15.2.4 使用Steganography 397
15.2.5 包含证书 398
15.2.6 显示证书 399
15.2.7 导入证书 399
15.2.8 导出证书 399
附录A 一些有用的RFC 400
附录B 端口的分配 430