本书结合大量的典型实例,详细介绍了用Java来编写网络应用程序的技术。本书的范例都基于的JDK 1.5版本,书中内容包括:Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、Java反射机制、RMI框架、JDBC API、JavaMail API、MVC设计模式、安全网络通信、CORBA和Web服务。另外,本书还涵盖了Sun公司的SCJD(Sun Certified Java Developer)认证的考试要点。
书中范例源文件请到http://www.fecit.com.cn的“下载专区”下载。
阅读本书,读者不仅可以掌握网络编程的实用技术,还可以进一步提高按照面向对象的思想来设计和编写Java软件的能力。本书适用于所有Java编程人员,包括Java初学者及资深Java开发人员。本书还可作为高校的Java教材,以及企业的Java培训教材,也可作为Sun公司SCJD认证的辅导教材。
目录
- 第1章 Java网络编程入门1
- 1.1 进程之间的通信1
- 1.2 计算机网络的概念3
- 1.3 OSI参考模型5
- 1.4 TCP/IP参考模型和
- TCP/IP协议8
- 1.4.1 IP协议11
- 1.4.2 TCP协议及端口14
- 1.4.3 RFC简介15
- 1.4.4 客户/服务器通信模式16
- 1.5 用Java编写客户/服务器
- 程序17
- 1.5.1 创建EchoServer18
- 1.5.2 创建EchoClient20
- 1.6 小结22
- 1.7 练习题23
- 第2章 Socket用法详解25
- 2.1 构造Socket25
- 2.1.1 设定等待建立连接的
- 超时时间26
- 2.1.2 设定服务器的地址26
- 2.1.3 设定客户端的地址27
- 2.1.4 客户连接服务器时
- 可能抛出的异常27
- 2.2 获取Socket的信息30
- 2.3 关闭Socket32
- 2.4 半关闭Socket33
- 2.5 设置Socket的选项38
- 2.5.1 TCP_NODELAY选项38
- 2.5.2 SO_RESUSEADDR选项38
- 2.5.3 SO_TIMEOUT选项39
- 2.5.4 SO_LINGER选项42
- 2.5.5 SO_RCVBUF选项44
- 2.5.6 SO_SNDBUF选项45
- 2.5.7 SO_KEEPALIVE选项45
- 2.5.8 OOBINLINE选项45
- 2.5.9 服务类型选项45
- 2.5.10 设定连接时间、延迟和
- 带宽的相对重要性46
- 2.6 发送邮件的SMTP客户程序47
- 2.7 小结51
- 2.8 练习题52
- 第3章 ServerSocket用法详解55
- 3.1 构造ServerSocket55
- 3.1.1 绑定端口55
- 3.1.2 设定客户连接请求
- 队列的长度56
- 3.1.3 设定绑定的IP地址58
- 3.1.4 默认构造方法的作用58
- 3.2 接收和关闭与客户的连接59
- 3.3 关闭ServerSocket60
- 3.4 获取ServerSocket的信息60
- 3.5 ServerSocket选项62
- 3.5.1 SO_TIMEOUT选项62
- 3.5.2 SO_REUSEADDR选项63
- 3.5.3 SO_RCVBUF选项64
- 3.5.4 设定连接时间、延迟和
- 带宽的相对重要性64
- 3.6 创建多线程的服务器65
- 3.6.1 为每个客户分配一个线程65
- 3.6.2 创建线程池67
- 3.6.3 使用JDK类库提供的
- 线程池72
- 3.6.4 使用线程池的注意事项74
- 3.7 关闭服务器76
- 3.8 小结80
- 3.9 练习题81
- 第4章 非阻塞通信83
- 4.1 线程阻塞的概念83
- 4.1.1 线程阻塞的原因83
- 4.1.2 服务器程序用多线程
- 处理阻塞通信的局限84
- 4.1.3 非阻塞通信的基本思想85
- 4.2 java.nio包中的主要类87
- 4.2.1 缓冲区Buffer88
- 4.2.2 字符编码Charset90
- 4.2.3 通道Channel90
- 4.2.4 SelectableChannel类92
- 4.2.5 ServerSocketChannel类93
- 4.2.6 SocketChannel类93
- 4.2.7 Selector类96
- 4.2.8 SelectionKey类97
- 4.3 服务器编程范例100
- 4.3.1 创建阻塞的EchoServer100
- 4.3.2 创建非阻塞的EchoServer103
- 4.3.3 在EchoServer中混合用
- 阻塞模式与非阻塞模式110
- 4.4 客户端编程范例114
- 4.4.1 创建阻塞的EchoClient114
- 4.4.2 创建非阻塞的EchoClient116
- 4.4.3 创建非阻塞的PingClient120
- 4.5 小结126
- 4.6 练习题127
- 第5章 创建非阻塞的HTTP服务器129
- 5.1 HTTP协议简介129
- 5.1.1 HTTP请求格式129
- 5.1.2 HTTP响应格式132
- 5.1.3 测试HTTP请求133
- 5.2 创建非阻塞的HTTP
- 服务器137
- 5.2.1 服务器主程序:
- HttpServer类137
- 5.2.2 具有自动增长的缓冲区的
- ChannelIO类138
- 5.2.3 负责处理各种事件的
- Handler接口140
- 5.2.4 负责处理接收连接就绪
- 事件的AcceptHandler类140
- 5.2.5 负责接收HTTP请求和
- 发送HTTP响应的
- RequestHandler类141
- 5.2.6 代表HTTP请求的
- Request类143
- 5.2.7 代表HTTP响应的
- Response类145
- 5.2.8 代表响应正文的Content
- 接口及其实现类147
- 5.2.9 运行HTTP服务器149
- 5.3 小结150
- 5.4 练习题151
- 第6章 客户端协议处理框架153
- 6.1 客户端协议处理框架的
- 主要类153
- 6.2 在客户程序中运用
- 协议处理框架154
- 6.2.1 URL类的用法154
- 6.2.2 URLConnection类的用法156
- 6.3 实现协议处理框架160
- 6.3.1 创建EchoURLConnection
- 类161
- 6.3.2 创建EchoURLStreamHandler
- 及工厂类162
- 6.3.3 创建EchoContentHandler
- 类及工厂类163
- 6.3.4 在EchoClient类中运用
- ECHO协议处理框架165
- 6.4 小结166
- 6.5 练习题167
- 第7章 用Swing组件展示
- HTML文档169
- 7.1 在按钮等组件上展示
- HTML文档170
- 7.2 用JEditorPane组件
- 创建简单的浏览器171
- 7.3 小结179
- 7.4 练习题179
- 第8章 基于UDP的
- 数据报和套接字181
- 8.1 UDP协议简介181
- 8.2 DatagramPacket类184
- 8.2.1 选择数据报的大小185
- 8.2.2 读取和设置DatagramPacket
- 的属性185
- 8.2.3 数据格式的转换186
- 8.2.4 重用DatagramPacket187
- 8.3 DatagramSocket类189
- 8.3.1 构造DatagramSocket189
- 8.3.2 接收和发送数据报190
- 8.3.3 管理连接190
- 8.3.4 关闭DatagramSocket191
- 8.3.5 DatagramSocket的选项191
- 8.3.6 IP服务类型选项193
- 8.4 DatagramChannel类193
- 8.4.1 创建DatagramChannel194
- 8.4.2 管理连接194
- 8.4.3 用send()方法发送数据报194
- 8.4.4 用receive()方法接
- 收数据报195
- 8.4.5 用write()方法发送数据报198
- 8.4.6 用read()方法接收数据报199
- 8.5 组播Socket202
- 8.5.1 MulticastSocket类205
- 8.5.2 组播Socket的范例207
- 8.6 小结209
- 8.7 练习题210
- 第9章 对象的序列化与反序列化213
- 9.1 JDK类库中的序列化API213
- 9.2 实现Serializable接口218
- 9.2.1 序列化对象图220
- 9.2.2 控制序列化的行为222
- 9.2.3 readResolve()方法在
- 单例类中的运用229
- 9.3 实现Externalizable接口231
- 9.4 可序列化类的不同
- 版本的序列化兼容性233
- 9.5 小结235
- 9.6 练习题236
- 第10章 Java语言的反射机制239
- 10.1 Java Reflection API简介239
- 10.2 在远程方法调用中运用
- 反射机制244
- 10.3 代理模式248
- 10.3.1 静态代理类248
- 10.3.2 动态代理类250
- 10.3.3 在远程方法调用中
- 运用代理类253
- 10.4 小结258
- 10.5 练习题259
- 第11章 RMI框架261
- 11.1 RMI的基本原理262
- 11.2 创建第一个RMI应用264
- 11.2.1 创建远程接口264
- 11.2.2 创建远程类265
- 11.2.3 创建服务器程序267
- 11.2.4 创建客户程序269
- 11.2.5 运行RMI应用270
- 11.3 远程对象工厂设计模式272
- 11.4 远程方法中的参数与
- 返回值传递277
- 11.5 回调客户端的远程对象281
- 11.6 远程对象的并发访问286
- 11.7 分布式垃圾收集289
- 11.8 远程对象的equals()、
- hashCode()和clone()方法294
- 11.9 使用安全管理器294
- 11.10 RMI应用的部署及类的
- 动态加载295
- 11.11 远程激活297
- 11.12 小结303
- 11.13 练习题304
- 第12章 通过JDBC API
- 访问数据库305
- 12.1 JDBC的实现原理306
- 12.2 安装和配置MySQL
- 数据库308
- 12.3 JDBC API简介310
- 12.4 JDBC API的基本用法314
- 12.4.1 处理字符编码的转换317
- 12.4.2 把连接数据库的各种
- 属性放在配置文件中318
- 12.4.3 管理Connection、Statement
- 和ResultSet对象的
- 生命周期321
- 12.4.4 执行SQL脚本文件326
- 12.4.5 处理SQLException328
- 12.4.6 输出JDBC日志329
- 12.4.7 获得新插入记录的
- 主键值329
- 12.4.8 设置批量抓取属性330
- 12.4.9 检测驱动器使用的
- JDBC版本330
- 12.4.10 元数据331
- 12.5 可滚动及可更新的结果集333
- 12.6 行集339
- 12.7 调用存储过程346
- 12.8 处理Blob和Clob
- 类型数据347
- 12.9 控制事务351
- 12.9.1 事务的概念351
- 12.9.2 声明事务边界的概念353
- 12.9.3 在mysql.exe程序中
- 声明事务354
- 12.9.4 通过JDBC API
- 声明事务边界356
- 12.9.5 保存点357
- 12.9.6 批量更新358
- 12.9.7 设置事务隔离级别360
- 12.10 数据库连接池362
- 12.10.1 创建连接池363
- 12.10.2 DataSource数据源369
- 12.11 小结371
- 12.12 练习题372
- 第13章 基于MVC和RMI的
- 分布式应用375
- 13.1 MVC设计模式简介375
- 13.2 store应用简介377
- 13.3 创建视图381
- 13.4 创建控制器389
- 13.5 创建模型390
- 13.6 创建独立应用394
- 13.7 创建分布式应用395
- 13.8 小结398
- 13.9 练习题398
- 第14章 通过JavaMail API
- 收发邮件401
- 14.1 E-mail协议简介401
- 14.1.1 SMTP简单邮件
- 传输协议401
- 14.1.2 POP3邮局协议402
- 14.1.3 接收邮件的新
- 协议IMAP402
- 14.1.4 MIME简介403
- 14.2 JavaMail API简介403
- 14.3 建立JavaMail应用程序的
- 开发环境405
- 14.3.1 获得JavaMail API
- 的类库405
- 14.3.2 安装和配置邮件服务器406
- 14.4 创建JavaMail
- 应用程序408
- 14.5 身份验证412
- 14.6 URLName类416
- 14.7 创建和读取复杂
- 电子邮件418
- 14.7.1 邮件地址419
- 14.7.2 邮件头部420
- 14.7.3 邮件标记421
- 14.7.4 邮件正文422
- 14.8 操纵邮件夹427
- 14.9 小结432
- 14.10 练习题433
- 第15章 安全网络通信435
- 15.1 SSL简介435
- 15.1.1 加密通信436
- 15.1.2 安全证书436
- 15.1.3 SSL握手437
- 15.1.4 创建自我签名的
- 安全证书438
- 15.2 JSSE简介439
- 15.2.1 KeyStore、KeyManager
- 与TrustManager类442
- 15.2.2 SSLContext类443
- 15.2.3 SSLServerSocketFactory
- 类444
- 15.2.4 SSLSocketFactory类444
- 15.2.5 SSLSocket类444
- 15.2.6 SSLServerSocket类447
- 15.2.7 SSLEngine类448
- 15.3 创建基于SSL的安全
- 服务器和安全客户453
- 15.4 小结457
- 15.5 练习题457
- 第16章 CORBA简介459
- 16.1 创建IDL接口460
- 16.2 创建IDL接口的实现类460
- 16.3 创建服务器程序461
- 16.4 创建客户程序462
- 16.5 运行CORBA程序463
- 16.6 小结464
- 16.7 练习题465
- 第17章 Web服务简介467
- 17.1 SOAP简介467
- 17.2 建立Apache AXIS环境469
- 17.3 在Tomcat上发布
- Apache-AXIS Web应用470
- 17.4 创建SOAP服务471
- 17.4.1 创建提供SOAP
- 服务的Java类471
- 17.4.2 创建SOAP服务的
- 发布描述符文件471
- 17.5 管理SOAP服务472
- 17.5.1 发布SOAP服务472
- 17.5.2 删除SOAP服务473
- 17.6 创建和运行SOAP
- 客户程序473
- 17.7 发布JWS服务476
- 17.8 小结476
- 17.9 练习题477
- 附录A 本书范例的运行方法479
- A.1 本书所用软件的下载地址479
- A.2 部分软件的安装479
- A.2.1 安装JDK480
- A.2.2 安装ANT480
- A.2.3 安装Tomcat481
- A.3 编译源程序481
- A.4 运行客户/服务器程序482