具体描述
《Java网络编程精解》结合大量的典型实例,详细介绍了用Java来编写网络应用程序的技术。《Java网络编程精解》的范例都基于最新的JDK 1.5版本,书中内容包括:Java网络编程的基础知识、套接字编程、非阻塞通信、创建HTTP服务器与客户程序、数据报通信、对象的序列化与反序列化、.Java反射机制、RMI框架、JDBCAPI、JavaMail
API、MVC设计模式、安全网络通信、CORBA和Web服务。另外,《Java网络编程精解》还涵盖了Sun公司的SCJD(sun Certiffed Java Developer)认证的考试要点。
书中范例源文件请到http://www.fecit.com.cn的“下载专区”下载。
作者简介
孙卫琴,1975年出生,籍贯江苏常州,1997年毕业于上海交通大学,随后主要从事基于Java的软件开发工作,在此期间还从事过Java方面的培训和咨询工作。2002年开始Java技术领域的图书创作。 代表著作有:《Java面向对象编程》、《精通Hibernate:Java对象持久化技术详解》、《精通Sturts:基于MVC的Java Web设计与开发》、《Tomcat与Java Web开发技术详解》。
目录信息
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 创建EchoServer 18
1.5.2 创建EchoClient 20
1.6 小结 22
1.7 练习题 23
第2章 Socket用法详解 25
2.1 构造Socket 25
2.1.1 设定等待建立连接的超时时间 26
2.1.2 设定服务器的地址 26
2.1.3 设定客户端的地址 27
2.1.4 客户连接服务器时可能抛出的异常 27
2.2 获取Socket的信息 30
2.3 关闭Socket 32
2.4 半关闭Socket 33
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 构造ServerSocket 55
3.1.1 绑定端口 55
3.1.2 设定客户连接请求队列的长度 56
3.1.3 设定绑定的IP地址 58
3.1.4 默认构造方法的作用 58
3.2 接收和关闭与客户的连接 59
3.3 关闭ServerSocket 60
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 缓冲区Buffer 88
4.2.2 字符编码Charset 90
4.2.3 通道Channel 90
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 创建阻塞的EchoServer 100
4.3.2 创建非阻塞的EchoServer 103
4.3.3 在EchoServer中混合用阻塞模式与非阻塞模式 110
4.4 客户端编程范例 114
4.4.1 创建阻塞的EchoClient 114
4.4.2 创建非阻塞的EchoClient 116
4.4.3 创建非阻塞的PingClient 120
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 重用DatagramPacket 187
8.3 DatagramSocket类 189
8.3.1 构造DatagramSocket 189
8.3.2 接收和发送数据报 190
8.3.3 管理连接 190
8.3.4 关闭DatagramSocket 191
8.3.5 DatagramSocket的选项 191
8.3.6 IP服务类型选项 193
8.4 DatagramChannel类 193
8.4.1 创建DatagramChannel 194
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 组播Socket 202
8.5.1 MulticastSocket类 205
8.5.2 组播Socket的范例 207
8.6 小结 209
8.7 练习题 210
第9章 对象的序列化与反序列化 213
9.1 JDK类库中的序列化API 213
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 处理SQLException 328
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 接收邮件的新协议IMAP 402
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 安装JDK 480
A.2.2 安装ANT 480
A.2.3 安装Tomcat 481
A.3 编译源程序 481
A.4 运行客户/服务器程序 482
· · · · · · (收起)
读后感
这本书最早是在北京师范大学本科时候一位老师开始的“网络编程”课推荐用的教材,需要有相对扎实的Java语法基础。 通过这本书能够看到许多Java的高级特性,事实上刚开始半年时间没有特别在意这本书的价值,但是当希望能够深刻理解Java的网络方面的内容,比如JDBC高级特性/RMI/ ...
这本书最早是在北京师范大学本科时候一位老师开始的“网络编程”课推荐用的教材,需要有相对扎实的Java语法基础。 通过这本书能够看到许多Java的高级特性,事实上刚开始半年时间没有特别在意这本书的价值,但是当希望能够深刻理解Java的网络方面的内容,比如JDBC高级特性/RMI/ ...
这本书最早是在北京师范大学本科时候一位老师开始的“网络编程”课推荐用的教材,需要有相对扎实的Java语法基础。 通过这本书能够看到许多Java的高级特性,事实上刚开始半年时间没有特别在意这本书的价值,但是当希望能够深刻理解Java的网络方面的内容,比如JDBC高级特性/RMI/ ...
这本书最早是在北京师范大学本科时候一位老师开始的“网络编程”课推荐用的教材,需要有相对扎实的Java语法基础。 通过这本书能够看到许多Java的高级特性,事实上刚开始半年时间没有特别在意这本书的价值,但是当希望能够深刻理解Java的网络方面的内容,比如JDBC高级特性/RMI/ ...
这本书最早是在北京师范大学本科时候一位老师开始的“网络编程”课推荐用的教材,需要有相对扎实的Java语法基础。 通过这本书能够看到许多Java的高级特性,事实上刚开始半年时间没有特别在意这本书的价值,但是当希望能够深刻理解Java的网络方面的内容,比如JDBC高级特性/RMI/ ...
用户评价
这本书的排版和结构设计简直是教科书级别的典范。每一章的逻辑衔接都非常自然,就像是精心编排的乐章,不会让人感到突兀或迷失方向。我特别欣赏作者在讲解复杂协议时,总是先给出高层视图,然后再逐步拆解到细节层面,这种“自上而下”的讲解策略极大地降低了学习曲线。对于那些想要从应用层程序员转型为系统级网络架构师的人来说,这本书简直是必备的指南。它不仅教会你“怎么做”,更重要的是解释了“为什么这么做”,比如为什么要在特定情况下选择UDP而不是TCP,背后的权衡是什么。我感觉自己对网络安全基础知识也有了更深的理解,书中关于数据加密和认证协议的介绍,虽然不是重点,但也足够为后续深入学习打下坚实基础。读完后,我立刻尝试重构了项目中一个长期困扰性能问题的模块,效果立竿见影。
我必须承认,这本书的叙事节奏把握得相当到位,它不像某些技术书籍那样枯燥乏味,而是像一位经验丰富的老工程师在手把手地教你经验。最让我欣赏的是它对不同网络编程范式的对比分析,从传统的阻塞式调用到现代的响应式编程,作者没有简单地赞美某一种,而是客观地分析了各自的适用场景和局限性。这对于我决定在具体项目中采用何种架构至关重要。书中对异常处理和错误恢复机制的讨论也异常深入,这通常是教科书中容易被一带而过,但在实际生产环境中却是决定应用稳定性的关键因素。我特别喜欢它在讲解每个新概念时,都会穿插一些历史背景或者设计哲学,这使得技术知识变得有血有肉,而不是一堆冰冷的规则。整本书读下来,感觉收获的不仅仅是代码技巧,更多的是一种构建可靠系统的思维模式。
说实话,市面上关于网络编程的书籍汗牛充栋,但大多要么过于偏重理论,晦涩难懂,要么就是流于表面,只讲API调用。而这本则找到了一个绝佳的平衡点。它极其务实地关注了现代网络应用中开发者最常遇到的挑战,比如如何优雅地处理连接管理、超时重试机制的健壮性设计,以及如何利用并发模型最大限度地压榨服务器性能。作者对不同Java版本中网络API演进的梳理尤其到位,让我清晰地看到了技术迭代的脉络。最让我印象深刻的是,书中对网络调试日志的分析和解读部分,那段内容简直是“救命稻草”,帮我解决了好几个在生产环境中难以复现的间歇性连接中断问题。这本书真正体现了“实践出真知”的理念,每一行代码示例都仿佛是经过无数次线上考验的结晶,给人以极大的信心去应对真实的开发挑战。
这本书简直是打开了我对网络编程世界的一扇新窗户,尽管我对这个领域不算完全陌生,但作者的深度和广度还是让我大开眼界。尤其是它对TCP/IP协议栈的剖析,那种层层递进的讲解方式,让我感觉自己不再是简单地使用API,而是真正理解了数据包在网络中是如何流动的。书中对Socket编程的实例讲解非常到位,代码清晰易懂,即便是初学者也能快速上手,但它又不仅仅停留在基础层面,对高级特性的探讨,比如异步I/O模型(NIO)的深入剖析,让我这个有一定经验的开发者都受益匪浅。书中的案例没有那种为了炫技而堆砌复杂代码的问题,而是紧密围绕实际开发中会遇到的痛点来设计,读完后,我感觉自己对构建健壮、高性能的网络应用有了更扎实的理论基础和实战经验。特别是关于并发处理的部分,处理得尤为精彩,让我对如何避免常见的竞态条件和死锁有了全新的认识。
这本书的深度和广度令人印象深刻,它不满足于停留在Java标准库的表面,而是深入挖掘了JVM、操作系统内核与网络栈交互的细节。我曾疑惑于某些高性能网络框架底层的工作原理,这本书通过清晰的图解和恰到好处的代码片段,将那些晦涩难懂的概念阐释得淋漓尽致。例如,它对零拷贝技术在网络传输中的应用阐述得非常透彻,这对于优化大量数据传输的场景提供了直接的思路。更难能可贵的是,作者没有回避那些“脏活累活”,比如网络调试工具的使用、性能瓶颈的定位和分析方法,这些实战技巧远比理论知识更有价值。虽然有些章节涉及到了比较底层的知识,初次接触可能会稍感吃力,但作者的引导非常到位,确保读者能够循序渐进地消化吸收,最终建立起一个宏大而完整的网络编程知识体系。
看这本书的感受就是…越看越想看…丝毫没有枯燥的感觉…极其适合入门…很符合我的思维方式和学习习惯…
适合入门级的程序员抄一抄, 很大一部分就是java doc的白话版。
第一个项目用书,纪念一下
讲java网络编程的书很少,原创的唯一一本?孙姐姐的书向来不错
还是那句话,孙的水平决定了这本书一般……