JAVA 是现代网络编程中使用的主要编程语言之一。网络编程支持不仅是指提供 API 以在两台或多台远程计算机之间建立通信,而且还提供所有必要的手段,即使是新手程序员也可以轻松访问网络资源。
Java 中有一个专门用于此原因的完整包,称为 java.NET 包。到目前为止,网络是一个庞大而复杂的主题,但在本文中,我们将尝试从 Java API 的角度探索网络编程的一些关键点。
网络概述
套接字的概念构成了现代网络编程的基础,它指的是网络中两台计算机之间的通信端点。套接字编程使我们能够一次在多个客户端之间建立通信,通信的信息类型也根据与套接字一起使用的端口号而有所不同。因此,一台计算机不仅可以与多个客户端进行通信,还可以与多种类型的信息进行通信。
在网络传输过程中,数据被分成更小的块,称为数据包,然后通过网络发送到一个地址。这种通信的规范称为路由协议。网际协议(IP)是一种将信息传输到目标地址但不保证所述数据包将被传递的低级协议。这意味着根据该协议的通信被标记为不可靠。还有另一种称为传输控制协议 (TCP) 的协议,它是一种高级协议,它通过对未传递的数据包进行分类和重新传输到目标地址来以可靠的方式管理数据包的传输。
因此,该协议称为 TCP/IP。该协议预留了1024个端口,用于确定一些高阶协议。为了消除混淆,请注意这些特定协议决定了传输信息的类型,而低级协议 (TCP/IP) 只关心如何通过将信息调整为称为数据包的更小块来传输数据的机制,而无需关心它包含的信息类型。
我们熟悉其中许多特定协议。通常,特定的端口号由特定的协议标识。但是,出于安全原因,服务器管理员可能会覆盖此设置。但是,一般来说,它们与端口号关联如下:文件传输协议或 FTP (21)、Telnet (23)、简单邮件传输协议或 SMTP (25)、whois (43)、超文本传输协议或 HTTP ( 80) 等等。在特定端口中接收到的通信决定了客户端将如何与接收到的数据进行交互。例如,在端口 80 (HTTP) 中接收到的数据意味着只有浏览器才能理解;这意味着它包含超文本页面和图像。
最后,网络通信的关键组成部分是计算机本身的地址,称为 IP(Internet 协议)地址。网络中的每台计算机都必须有一台。 IPv4(IP 地址版本 4)地址是一个 32 位值,组织为四个 8 位值块。 IP 地址的另一个最新发展是 IPv6(版本 6),它使用 8 个 16 位块中的 128 位值来表示一个地址。一个比另一个有几个优点和缺点,但是在编程时,我们不必过多关注它们,因为它是由 Java 自动处理的。
Java中的网络
Java 支持 TCP 和 UDP 协议,其中 TCP 用于跨网络的可靠的面向连接、基于流的 I/O,而 UDP 用于快速、不可靠的点对点数据报连接。与 UDP 相关的标签“不可靠性”有点轻描淡写。在实践中,通过 UDP 传输数据是相当可靠的,只有在通信高度强调绝对可靠性时才应该放弃使用这种模型。除此之外,UDP 在大多数情况下都非常有效,应出于所有实际原因使用。
Java URI 类
Java 有另一个类,称为 URI(统一资源标识符)。 URI 是标识资源的标准方法。它类似于 URL 类;实际上,URL 是 URI 类的一个子集。从概念上讲,除了标识 URI 所用的资源之外,URL 还使我们能够定位资源。这意味着所有的 URL 都是 URI,但反之则不然。因此,有了这个想法,在 Java 中选择合适的类是不是很困难?无法决定选择什么 - URI 或 URL?没有更多的困惑。
Java 提供了诸如 HttpCookie、CookieManager、CookieHandler 之类的类,以及诸如 CookiePolicy 和 CookieStore 之类的接口来处理有状态的 HTTP 会话,所有这些都在 java.net 包中。这些类在我们通常创建 HTTP 会话的 Servlet 和 JSP 工作时非常方便。
在 Java 中创建 TCP 客户端和服务器
在 Internet 上的主机之间创建双向、可靠、点对点、基于流的连接的最简单方法是实现 TCP 套接字,Java 提供了从头开始实现的所有必要方法。
在 Java 中创建 UDP 客户端和服务器
Java 通过网络传输数据报的方式是通过 UDP 协议。它可以称为 TCP 网络上的轻量级数据传输,因为 TCP 包含大量开销来保持传输的健全性,例如拥挤网络的拥塞控制、丢包导致的数据包重传策略等。这些使其成为维护主机之间连接的繁重且昂贵的方式。从这个意义上说,数据报虽然是一种不可靠的传输策略,但它是轻量级的,一旦通过网络发送,它就不会关心数据包的丢失。有时这种粗心的策略正是我们所需要的,而不是选择繁重的 TCP 连接。
结论
java.net 包中还有许多其他类。这几个可能是处理与在 Java 中实现网络应用程序相关的任何事情的基本类。但是,请注意,开发人员的真正优势在于其将网络作为一门学科的概念基础,而不是任何编程语言。话虽如此,值得一提的是,Java 使启动网络编程变得容易,即使对于初出茅庐的程序员也是如此。在 Java 诞生之初,人们认为它是一种用于 Internet 编程的语言。这样的概念当然有一些价值,因为我们可以看到它在这方面提供的 API 支持的扩展。