Java UDP和TCP是两种不同的网络协议,它们都是用于在计算机之间传输数据的标准。UDP和TCP都是基于IP协议的,但它们有很多不同之处。
UDP(用户数据报协议)是一种无连接的、面向无连接的、面向报文的传输协议。它不需要在发送前建立连接,也不需要在发送完成后释放连接。UDP只是将数据包发送到相应的IP地址上,而不保证能够到达相应的主机。因此,UDP具有快速传输、低开销、少量带宽使用等优势。
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输协议。它要求在发送前建立连接,并且在发送完成后释放连接。TCP保证数据能够准确无误地到达相应的主机;如果数据包丢失或者出错了,TCP将重新发送数据包以保证正确性。因此,TCP具有可靠性好、传输效率低、带宽使用大等特点。
public class UdpTcp { public static void main(String[] args) { // UDP 使用 DatagramSocket 和 DatagramPacket 类来传递数据 // TCP 使用 Socket 和 ServerSocket 类来传递数据 } }
TCP套接字是面向连接的,基于流。基于UDP的套接字是无连接的,基于数据报。
使用UDP发送的数据块称为数据报或UDP数据包。每个UDP分组具有数据,目的地IP地址和目的地端口号。
无连接套接字在通信之前不建立连接。
UDP是不可靠的协议,因为它不保证到达分组的传递和顺序。
在无连接协议UDP中,不会有服务器套接字。
在UDP连接中,客户端和服务器发送或接收一组数据,而无需事先知道它们之间的通信。
发送到同一目的地的每个数据块独立于先前发送的数据。
当编码UDP连接时,使用以下两个类。
DatagramPacket
类表示UDP数据报。DatagramSocket
类表示用于发送或接收数据报包的UDP套接字。以下代码显示如何在localhost中创建绑定到端口号12345的UDP套接字。
DatagramSocket udpSocket = new DatagramSocket(12345, "localhost");
DatagramSocket
类提供了一个bind()方法,它允许您将套接字绑定到本地IP地址和本地端口号。
DatagramPacket包含三个东西:
DatagramPacket类的构造函数创建一个数据包来接收数据如下:
DatagramPacket(byte[] buf, int length) DatagramPacket(byte[] buf, int offset, int length)
DatagramPacket类的构造函数创建一个数据包来发送数据如下:
DatagramPacket(byte[] buf, int length, InetAddress address, int port) DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) DatagramPacket(byte[] buf, int length, SocketAddress address) DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
以下代码演示如何创建数据报:
以下代码创建一个数据包以接收1024字节的数据。
byte[] data = new byte[1024]; DatagramPacket packet = new DatagramPacket(data, data.length);
以下代码创建一个包的缓冲区大小为1024,并从偏移量8开始接收数据,它将只接收32字节的数据。
byte[] data2 = new byte[1024]; DatagramPacket packet2 = new DatagramPacket(data2, 8, 32);数据包中的数据总是指定偏移量和长度。我们需要使用offset和length来读取数据包中的数据。
Java网络教程 -Java网络TCP客户端套接字 Socket 类表示一个TCP客户端套接字。以下代码显示如何创建TCP客户端套接字:// Create S...
JavaFX教程 -JavaFX 选择框JavaFX框允许用户在几个选项之间快速选择。创建一个选择框我们可以使用ChoiceBox中的consturctors来创...
JavaFX教程 -JavaFX 进度显示器进度指示器以动态更改饼图的形式显示JavaFX中的操作进度。以下代码显示如何使用不确定值创建Progr...
Java日期时间 -Java时钟周期时钟 Clock 类表示真实世界的时钟。我们可以从Clock类中访问时区中的当前时间,日期和时间。我们可以...
Java日期时间传统互操作性在Java 8之前,Java日期和时间由 java.util.Date , java.util.Calendar 和 java.util.TimeZone 类以及...