2021-04-18 11:30  阅读(111)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-network-tcp-server.html

Java网络教程 - Java网络UDP套接字

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包含三个东西:

  • 目的IP地址
  • 目的端口号
  • 数据

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来读取数据包中的数据。

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 网络UDP套接字
上一篇
Java 网络TCP客户端套接字
下一篇
Java 网络UDP服务器