Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java udp 发送和接收数据


在 Java 中,使用 UDP(User Datagram Protocol)发送和接收数据是一种非连接、无状态的网络通信方式。下面将介绍两种基本的实现方式:一种是基于纯 Java 的标准库,另一种是使用第三方库 Apache Commons Net。

方式一:使用纯 Java 的标准库

创建 UDP 服务器端:

  • 步骤:

    • 创建 DatagramSocket 实例并指定端口号,用于监听传入的数据报。
    • 创建一个 byte 数组作为接收缓冲区。
    • 创建 DatagramPacket 实例,用于接收数据。
    • 使用 receive() 方法接收数据。
    • 示例代码:
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPServer {
    public static void main(String[] args) throws Exception {
        DatagramSocket serverSocket = new DatagramSocket(9876);
        byte[] receiveData = new byte[1024];
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        serverSocket.receive(receivePacket);
        String receivedMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
        System.out.println("Received message: " + receivedMessage);
        serverSocket.close();
    }
}
  • 依赖:无

创建 UDP 客户端:

  • 步骤:

    • 创建 DatagramSocket 实例。
    • 创建 DatagramPacket 实例,将数据放入数据报中。
    • 使用 send() 方法发送数据。
    • 示例代码:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPClient {
    public static void main(String[] args) throws Exception {
        DatagramSocket clientSocket = new DatagramSocket();
        InetAddress serverAddress = InetAddress.getByName("localhost");
        byte[] sendData = "Hello, UDP Server!".getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, 9876);
        clientSocket.send(sendPacket);
        clientSocket.close();
    }
}
  • 依赖:无

方式二:使用 Apache Commons Net 库

Apache Commons Net 是一个开源的网络通信库,其中包含了一些方便的工具类来简化 UDP 通信。

添加依赖:

  • Maven:
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.8.0</version>
</dependency>
  • Gradle:
implementation 'commons-net:commons-net:3.8.0'

创建 UDP 服务器端:

  • 步骤:

    • 创建 DatagramSocket 实例并指定端口号,用于监听传入的数据报。
    • 创建一个 byte 数组作为接收缓冲区。
    • 使用 receive() 方法接收数据。
    • 示例代码:
import org.apache.commons.net.DatagramSocketClient;

public class UDPServer {
    public static void main(String[] args) throws Exception {
        DatagramSocketClient server = new DatagramSocketClient();
        server.open();
        byte[] receiveData = new byte[1024];
        int bytesRead = server.receive(receiveData);
        String receivedMessage = new String(receiveData, 0, bytesRead);
        System.out.println("Received message: " + receivedMessage);
        server.close();
    }
}

创建 UDP 客户端:

  • 步骤:

    • 创建 DatagramSocket 实例。
    • 使用 send() 方法发送数据。
    • 示例代码:
import org.apache.commons.net.DatagramSocketClient;

public class UDPClient {
    public static void main(String[] args) throws Exception {
        DatagramSocketClient client = new DatagramSocketClient();
        client.open();
        byte[] sendData = "Hello, UDP Server!".getBytes();
        client.send(sendData, sendData.length);
        client.close();
    }
}

这两种实现方式都能让你在 Java 中使用 UDP 进行数据的发送和接收。你可以根据项目的需要选择合适的方式。注意,在实际开发中,你需要根据情况处理异常、添加适当的错误处理等。

我将为你介绍两种常见的方式:基于原生Java套接字(Socket)的实现和使用第三方库Netty的实现。###Maven依赖###Gradl ...
下面我将介绍几种不同的方式来实现JavaUDP广播的接收和发送,包括步骤流程和示例代码。###使用Java的原生Socket类实现UDP广播 ...
请注意,UDP是一种无连接的协议,因此在使用UDP传输文件时需要考虑数据完整性和可靠性的问题。###方式一:基本UDP传输这种方式通过UDP ...
###使用SocketSocket是Java提供的标准库,用于实现基于网络的通信。下面是使用Socket发送TCP报文的步骤:步骤流程:1. ...
基于 Web 的应用程序通常需要具有向用户/客户端发送邮件的功能。Flask-Mail 扩展使得用任何电子邮件服务器设置一个简单接口变得非常 ...