随着互联网上提供的服务越来越多,世界正以前所未有的规模相互联系。从商业交易到嵌入式应用程序(如冰箱中的应用程序)的各种应用程序正在连接到互联网。随着孤立的应用程序不再是常态,应用程序的网络化变得越来越重要。
本书的目标是为读者提供开发 Java 应用程序所必需的技能,这些应用程序可以通过网络与其他应用程序和服务进行连接和工作。我们将向您介绍使用 Java 提供的各种网络选项,这些选项将使您能够使用适当的技术为手头的任务开发应用程序。
第一章、网络编程入门,介绍了基本的网络术语和概念。Java 提供的网络支持用简单的例子加以说明。一个简单的客户端/服务器应用程序与服务器的线程版本一起提供。
第 2 章网络寻址解释了网络上的节点如何使用地址。介绍了 Java 如何表示这些地址,以及对 IPv4 和 IPv6 的支持。本章还介绍 Java 如何配置各种网络属性。
第 3 章NIO 对网络的支持解释了 NIO 包如何为使用缓冲区和通道的通信提供支持。这些技术以客户端/服务器应用程序为例进行了说明。还演示了 NIO 对异步通信的支持。
第 4 章客户端/服务器开发介绍了 HTTP 是一种重要且广泛使用的协议。Java 以多种方式提供对该协议的支持。这些技术与如何在 Java 中处理 Cookie 的演示一起进行了说明。
第 5 章对等网络讨论了对等网络如何为传统的客户端/服务器架构提供灵活的替代方案。介绍了基本的对等概念,并演示了 Java 如何支持这种体系结构。FreePastry 用于说明一个开源对等解决方案框架。
第 6 章UDP 和多播解释了 UDP 是如何替代 TCP 的。它为应用程序跨 Internet 进行通信提供了一种不太可靠但更高效的方式。演示了 Java 对该协议的广泛支持,包括 NIO 支持,以及 UDP 如何支持流媒体。
第 7 章网络可扩展性解释了随着服务器上的需求越来越多,系统需要如何扩展以满足这些需求。演示了几种支持这种需求的线程技术,包括线程池、未来和 NIO 的选择器。
第 8 章、网络安全讨论了应用程序如何应对各种威胁。Java 使用加密和安全哈希技术支持这一点。介绍了对称和非对称加密技术。此外,还演示了 TLS/SSL 的使用。
第 9 章网络互操作性介绍了 Java 应用程序可能需要如何与其他以不同语言编写的应用程序交换信息。研究了影响应用程序互操作性的问题,包括字节顺序。使用套接字和中间件演示了不同实现之间的通信。
本书中遇到的网络编程示例需要 JavaSDK1.8。建议使用 IDE,如 NetBeans 或 Eclipse。NetBeans IDE 8.0.2 EE 版用于说明 web 服务的开发。
本书面向已经精通 Java 并希望学习如何开发支持网络的 Java 应用程序的开发人员。只需要熟悉基本的 Java 和面向对象编程概念。您将学习网络编程的基础知识,以及如何使用多种不同的套接字创建安全和可扩展的应用程序。
在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。
文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“SSLSocketFactory
类'getDefault
返回一个SSLSocketFactory
实例,其createSocket
创建了一个连接到安全 echo 服务器的套接字。”
代码块设置如下:
public class ThreadedEchoServer implements Runnable {
private static Socket clientSocket;
public ThreadedEchoServer(Socket clientSocket) {
this.clientSocket = clientSocket;
}
...
}
任何命令行输入或输出的编写方式如下:
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: First Last
What is the name of your organizational unit?
[Unknown]: packt
What is the name of your organization?
[Unknown]: publishing
What is the name of your City or Locality?
[Unknown]: home
What is the name of your State or Province?
[Unknown]: calm
What is the two-letter country code for this unit?
[Unknown]: me
Is CN=First Last, OU=packt, O=publishing, L=home, ST=calm, C=me correct?
[no]: y
Enter key password for <mykey>
(RETURN if same as keystore password):
新术语和重要词语以粗体显示。您在屏幕上看到的单词,例如,在菜单或对话框中,会出现如下文本:“安装 NetBeans 后,启动它,然后从**文件****新项目……**菜单项创建一个新项目。”
警告或重要注释显示在这样的框中。
提示和技巧如下所示。
我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢还是不喜欢。读者反馈对我们来说很重要,因为它可以帮助我们开发出您将真正从中获得最大收益的标题。
要向我们发送总体反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>
,并在邮件主题中提及该书的标题。
如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南www.packtpub.com/authors。
既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。
您可以从您的账户下载示例代码文件 http://www.packtpub.com 对于您购买的所有 Packt 出版书籍。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。
我们还为您提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。彩色图像将帮助您更好地了解输出中的更改。您可以从以下位置下载此文件:https://www.packtpub.com/sites/default/files/downloads/LearningNetworkProgrammingwithJava_Graphics.pdf 。
虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表单链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。
要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。
在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。
请致电<[copyright@packtpub.com](mailto:copyright@packtpub.com)>
与我们联系,并提供可疑盗版材料的链接。
我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。
如果您对本书的任何方面有任何问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>
与我们联系,我们将尽力解决该问题。