Java 提供了非常易用的网络 API,使用这些 API 我们可以很方便的通过建立 TCP/IP 或 UDP 套接字,在网络之间进行相互通信,其中 TCP 通常比 UDP 使用的更加频繁,在本教程中我们对这两种方式都会进行相应说明。

阅读文章的过程中如果有任何疑问,欢迎添加笔者为好友,拉您进【七日书摘】微信交流群,一起交流技术,一起打造高质量的职场技术交流圈子,抱团取暖,共同进步。
七日书摘官方群.jpg

同时在本网站上还有三篇与 Java 网络相关的教程,分别是:

  1. Java IO 基础
  2. Java NIO 简明教程
  3. Java Multithreaded Servers Tutorial

尽管 Java 网络 API 允许我们通过套接字(Socket)打开或关闭网络连接,但所有的网络通信均需使用 Java IO 类 中的 InputStream 和 OutputStream 来实现。(编者注:请参考 Java IO 基础 之 网络(Networking)进行学习)

此外,你还可以使用 Java NIO API 中相关的网络类,用法与 Java 网络 API 基本类似,只是 Java NIO API 可以以非阻塞模式工作,在某些特定的场景中使用非阻塞模式可以获得较大的性能提升。

Java 网络基础(Java TCP Networking Basics)

通常情况下,客户端首先需要打开一个连接到服务器端的 TCP/IP 连接,然后客户端开始与服务器之间进行通信,当通信结束后客户端将关闭连接,如下图所示:
Java TCP Networking Basics.png

客户端可以通过已打开的连接发送多个请求。事实上,在服务器处于接收状态时,客户端可以发送尽可能多的数据并被服务器完全接收,同时服务器也可以主动关闭连接。

Java 中的 Socket 类和 ServerSocket 类(Java Socket's and ServerSocket's)

当客户端想要打开一个连接到服务器端的 TCP/IP 连接时,需要使用 Java Socket 类来打开。socket 类只需要被告知连接的 IP 地址和 TCP 端口,其余的都由 Java 来实现。

如果想要在服务器端开启一个 TCP 端口的监听服务,用来监听客户端的连接,必须要使用 Java ServerSocket 类。当客户端通过 Socket 连接服务器端的 ServerSocket 监听时,服务器端会分配给这个连接一个 Socket,此时客户端与服务器端间的通信就变成 Socket 与 Socket 之间的通信。

在后续的文章中会对 Socket 类和 ServerSocket 类进行详细的介绍。

Java UDP 网络基础(Java UDP Networking Basics)

UDP 的工作方式与 TCP 有所不同。使用 UDP 通信时,客户端与服务器之间并没有建立连接的概念,客户端可以将数据发送到服务器端,服务器端可以(也可以不)接收这些数据,而且客户端也并不知道这些数据是否被服务器成功接收。反之服务器向客户端发送数据时也是如此。

因为不能保证数据传输,UDP 相比 TCP 来说协议开销较小。

在有些场景中,无连接的 UDP 模型会优于 TCP,将在 Java UDP DatagramSocket 类进行相应的介绍。

英文原文链接:http://tutorials.jenkov.com/java-networking/index.html

------完------

推荐阅读:

Java IO 简明教程

Java NIO 简明教程

更多学习讨论欢迎进入七日书摘官方群: 七日书摘官方群

七日书摘官方群群聊二维码.png

参考资料:
https://www.cnblogs.com/czwbig/p/10018118.html
http://ifeve.com/java-io-network/