内容简介
《Java网络编程(第四版)》实用指南全面介绍了如何使用Java开发网络程序。你将学习如何使用Java的网络类库既快速又轻松地完成常见的网络编程任务,如编写多线程服务器、加密通信、广播到本地网络,以及向服务器端程序提交数据。作者提供了真正可实用的程序来讲解他介绍的方法和类。第4版经过全面修订,已经涵盖REST、SPDY、异步I/O和很多其他高级技术。本书主要内容有:研究Internet底层协议,如TCP/IP和UDP/IP;了解Java的核心I/O API如何处理网络输入和输出;发现InetAddress类如何帮助Java程序与DNS交互;用Java的URI和URL类定位、识别和下载网络资源;深入研究HTTP协议,包括REST、HTTP首部和cookie;使用Java的底层Socket类编写服务器和网络客户端;利用非阻塞I/O同时管理多个连接。
作者简介
Elliotte Rusty Harold,编写Java网络程序长达近20年。他不仅是一位资深作者,撰写过数十本有关Java、XML和HTML的图书,还经常在行业大会上发表演讲。他对多个开源项目做出过贡献,包括Jaxen XPath库和XOM。
内页插图
目录
前言
第1章 基本网络概念
网络
网络的分层
IP、TCP和UDP
Internet
客户/服务器模型
Internet标准
第2章 流
输出流
输入流
过滤器流
阅读器和书写器
第3章 线程
运行线程
从线程返回信息
同步
死锁
线程调度
线程池和Executor
第4章 Internet地址
InetAddress类
Inet4Address和Inet6Address
NetorkInterface类
一些有用的程序
第5章 URL和URI
URI
URL类
URI类
x--form-urlencoded
代理
通过GET与服务器端程序通信
访问口令保护的网站
第6章 HTTP
HTTP协议
HTTP方法
请求主体
Cookie
第7章 URLConnection
打开URLConnection
读取服务器的数据
读取首部
缓存
配置连接
配置客户端请求HTTP首部
向服务器写入数据
URLConnection的安全考虑
猜测MIME媒体类型
HttpURLConnection
第8章 客户端Socket
使用Socket
用Telnet研究协议
构造和连接Socket
设置Socket选项
Socket异常
GUI应用中的Socket
第9章 服务器Socket
使用ServerSocket
日志
构造服务器Socket
获得服务器socket的有关信息
Socket选项 HTTP服务器
第10章 安全Socket
保护通信
创建安全客户端Socket
选择密码组
事件处理器
会话管理
客户端模式
创建安全服务器Socket
配置SSLServerSocket
第11章 阻塞I/O
一个示例客户端
一个示例服务器
缓冲区
通道
就绪选择
第12章 UDP
UDP协议
UDP客户端
UDP服务器
DatagramPacket类
DatagramSocket类
一些有用的应用程序
DatagramChannel
第13章 IP组播
组播
使用组播Socket
两个简单示例
前言/序言
Java 网络编程(第四版) 内容概要 《Java网络编程(第四版)》是一本面向广大Java开发者,特别是需要深入理解和掌握网络编程技术的专业书籍。本书旨在系统性地讲解Java in the JDK中用于网络通信的各种API和技术,涵盖从底层的TCP/IP协议到上层应用层协议的实现,从客户端开发到服务器端架构设计,再到安全通信的策略。本书注重理论与实践相结合,通过大量的代码示例和详细的讲解,帮助读者理解复杂的网络概念,并能实际应用于开发中。 本书结构与内容详解 本书共分为几个主要部分,层层递进,逐步深入网络编程的各个层面。 第一部分:网络基础与Java网络API入门 网络协议基础回顾: 在深入Java实现之前,本书会简要回顾TCP/IP协议栈的基本概念,包括IP地址、端口、TCP的三次握手与四次挥手、UDP的工作原理等。这部分内容旨在为后续的Java网络编程打下坚实的基础,即使读者对网络协议不甚了解,也能快速跟上。 `InetAddress` 类: 介绍如何使用Java标准库中的`java.net.InetAddress`类来表示和操作IP地址。读者将学习如何获取本地主机名和IP地址,如何通过域名解析IP地址,以及如何处理IPv4和IPv6地址。 URL和URLConnection: 深入讲解`java.net.URL`类,这是Java中处理统一资源定位符(URL)的核心类。本书将演示如何构建URL、解析URL的各个组成部分(协议、主机、端口、路径、查询参数、片段标识符),以及如何使用`java.net.URLConnection`类来打开与URL的连接,并进行数据的读写。这包括了GET和POST等HTTP请求方法的实现,以及如何处理HTTP响应头信息。 `Socket` 编程(TCP): 这是本书的核心内容之一。详细讲解Java中实现TCP客户端和服务器端通信的`java.net.Socket`和`java.net.ServerSocket`类。 客户端Socket: 演示如何创建一个`Socket`对象,连接到远程服务器,并通过`InputStream`和`OutputStream`进行数据的双向传输。 服务器端Socket: 演示如何创建一个`ServerSocket`对象,监听指定的端口,并接受来自客户端的连接请求。每当一个客户端连接建立,`ServerSocket`就会创建一个新的`Socket`对象来处理该连接,从而实现多客户端并发通信。 数据流处理: 重点介绍如何高效地使用`InputStream`、`OutputStream`、`DataInputStream`、`DataOutputStream`、`BufferedReader`、`PrintWriter`等流类来读写各种类型的数据,包括字节流、字符流以及序列化对象。 断开连接处理: 讲解如何正确地处理TCP连接的关闭,包括客户端主动关闭和服务器端关闭,以及可能出现的异常情况。 第二部分:UDP编程与多线程网络应用 `DatagramPacket` 和 `DatagramSocket` (UDP): 讲解Java中实现UDP通信的`java.net.DatagramPacket`和`java.net.DatagramSocket`类。与TCP不同,UDP是一种无连接的、不可靠的数据报协议。本书将演示如何创建`DatagramPacket`来封装待发送的数据,以及如何使用`DatagramSocket`来发送和接收数据报。读者将理解UDP的特点,如发送速度快但数据可能丢失或乱序,适合一些对实时性要求高但对可靠性要求不高的场景。 多线程网络服务器: 深入探讨如何构建能够同时处理多个客户端请求的网络服务器。这是实现高可用、高性能服务器的关键。 线程模型: 详细介绍几种常见的服务器线程模型,包括“一个线程一个客户端”(one thread per client)、线程池(thread pool)以及更高级的反应器(reactor)和半同步/半反应器(proactor)模式。 `ExecutorService`: 讲解如何使用Java并发包中的`ExecutorService`来管理线程池,有效地复用线程,避免频繁创建和销毁线程带来的开销,从而提升服务器的吞吐量和响应速度。 并发安全: 在多线程环境下,数据共享和同步是必须解决的问题。本书将讨论如何使用`synchronized`关键字、`Lock`接口、`Semaphore`等并发控制机制来保证共享资源的访问安全,避免竞态条件和死锁。 第三部分:高级网络特性与协议实现 HTTP协议深入: 超文本传输协议(HTTP)是Web开发的基础。本书将不止步于简单的GET/POST请求,而是深入探讨HTTP协议的细节,包括HTTP请求和响应的结构、不同的HTTP方法(GET, POST, PUT, DELETE等)、状态码、头部信息(Headers)、Cookie、Session管理等。读者将学会如何使用Java代码模拟浏览器行为,进行更复杂的Web交互。 文件传输: 讲解如何使用Java网络API实现文件上传和下载功能。这通常会结合TCP套接字编程,并需要对数据传输的格式进行定义。 套接字选项与性能调优: 介绍`Socket`和`ServerSocket`的各种可配置选项,例如`SO_TIMEOUT`(设置读写超时)、`SO_LINGER`(控制连接关闭行为)、`SO_KEEPALIVE`(保持连接活跃)等。通过调整这些选项,可以优化网络应用的性能和健壮性。 IO多路复用与NIO: Java NIO (Non-blocking I/O) 是Java提供的一种更高效、更灵活的I/O模型,能够显著提升网络应用的并发处理能力。 `Channel`、`Buffer`、`Selector`: 详细讲解NIO的核心组件:`Channel`(通道,负责数据传输)、`Buffer`(缓冲区,用于存储数据)和`Selector`(选择器,用于监听多个通道的I/O事件)。 非阻塞模式: 演示如何在非阻塞模式下使用NIO,实现一个服务器端能够同时监听和处理大量客户端连接,而无需为每个连接创建独立线程。 `SocketChannel` 和 `ServerSocketChannel`: 介绍NIO中对应的TCP套接字操作类。 `DatagramChannel`: 讲解NIO在UDP方面的应用。 `Pipe` 和 `FileChannel`: 简要介绍NIO的其他用途。 第四部分:网络安全与现代网络应用 SSL/TLS安全通信: 随着网络安全的重要性日益凸显,本书将详细介绍如何在Java中实现安全套接字层(SSL)和传输层安全(TLS)协议。 `SSLSocket` 和 `SSLServerSocket`: 讲解如何使用这些类来创建加密的TCP连接。 证书管理: 介绍SSL/TLS证书的概念,以及如何在Java KeyStore中管理和使用数字证书,确保通信的身份验证和数据加密。 HTTPS客户端: 演示如何创建能够与HTTPS服务器通信的客户端。 网络协议设计与实现: 引导读者思考如何设计自己的应用层网络协议。这包括数据帧的结构、序列化/反序列化机制、消息类型定义、错误处理策略等。 高级网络框架简介: 简要介绍一些流行的Java网络编程框架,如Netty、Mina等,并阐述它们如何利用NIO等技术提供更强大、更易用的网络编程解决方案。本书不深入讲解这些框架的具体用法,而是点到为止,为读者指明进一步学习的方向。 网络诊断与调试: 提供一些实用的网络诊断工具和技巧,帮助读者在开发和排查问题时定位网络通信的瓶颈和故障。 适用读者 本书适合所有希望深入理解Java网络编程的开发者,包括: 初学者: 希望系统学习Java网络编程基础知识和API的开发者。 中级开发者: 希望提升网络应用性能、实现高并发服务器、或者解决复杂网络通信问题的开发者。 后端工程师: 需要开发分布式系统、微服务、高性能API接口的开发者。 对网络通信底层原理感兴趣的开发者: 想要理解TCP/IP、HTTP等协议在Java中的具体实现方式的开发者。 总结 《Java网络编程(第四版)》以其全面、深入、实用的特点,将成为Java开发者在网络编程领域一本不可或缺的参考书。本书不仅教授“如何做”,更侧重于“为什么这么做”,帮助读者建立起扎实的网络编程理论基础,并能自信地构建各种复杂的网络应用程序。通过本书的学习,读者将能够独立设计、开发和优化高效、安全、可靠的Java网络应用。
“我是在准备公司内部的一个Java高级培训时,偶然发现了这本《Java网络编程(第四版)》。说实话,我对网络编程一直有些畏惧,总觉得它抽象又难以捉摸。但这本书给我带来了完全不同的感受。它的结构非常清晰,从最基础的TCP/IP协议原理讲起,一点点深入到Socket编程、多线程在网络编程中的应用,再到更高级的 NIO、Netty框架。最让我惊喜的是,作者并没有直接堆砌代码,而是花了很多篇幅去讲解背后的逻辑和设计思想。比如,在讲解TCP三次握手和四次挥手时,作者用了很多生动的比喻,让我这个初学者也能理解其中的精妙。而且,书中给出的代码示例都非常精炼,并且附带了详尽的解释,很容易就能跑起来并加以改造。我尤其喜欢它在讲解HTTP协议部分时,不仅讲了协议的格式,还穿插了一些Web服务器的工作原理,这让我能更好地理解浏览器和服务器之间的通信过程。这本书不愧是经典,它不仅教会了我‘怎么做’,更重要的是教会了我‘为什么这样做’,这对于我后续深入学习分布式系统和微服务打下了坚实的基础。即使你不是网络编程的科班出身,只要你对Java有一定了解,这本书都非常值得一读,它会让你觉得网络编程并没有那么遥不可及。”