当前位置:首页 > Java

java如何用udp

2026-03-26 01:42:51Java

使用UDP进行网络通信的步骤

在Java中,UDP通信主要通过DatagramSocketDatagramPacket类实现。UDP是一种无连接的协议,适用于对实时性要求高但允许少量丢包的场景。

发送UDP数据包

创建DatagramSocket对象,无需指定端口(系统随机分配)或指定发送方端口。构造DatagramPacket时需指定目标地址和端口。

DatagramSocket socket = new DatagramSocket();
byte[] sendData = "Hello UDP".getBytes();
DatagramPacket sendPacket = new DatagramPacket(
    sendData, 
    sendData.length, 
    InetAddress.getByName("目标IP"), 
    目标端口
);
socket.send(sendPacket);
socket.close();

接收UDP数据包

创建DatagramSocket并绑定到指定端口。通过DatagramPacket接收数据,需提前分配缓冲区。

DatagramSocket socket = new DatagramSocket(监听端口);
byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
socket.receive(receivePacket); // 阻塞等待数据
String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
socket.close();

完整示例:双向通信

以下代码展示客户端发送消息、服务端接收并回复的流程:

服务端代码:

DatagramSocket serverSocket = new DatagramSocket(9876);
byte[] receiveData = new byte[1024];

while (true) {
    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
    serverSocket.receive(receivePacket);
    String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());

    // 发送回复
    byte[] sendData = ("ECHO: " + clientMessage).getBytes();
    DatagramPacket sendPacket = new DatagramPacket(
        sendData, 
        sendData.length, 
        receivePacket.getAddress(), 
        receivePacket.getPort()
    );
    serverSocket.send(sendPacket);
}

客户端代码:

java如何用udp

DatagramSocket clientSocket = new DatagramSocket();
byte[] sendData = "Ping".getBytes();
DatagramPacket sendPacket = new DatagramPacket(
    sendData, 
    sendData.length, 
    InetAddress.getByName("localhost"), 
    9876
);
clientSocket.send(sendPacket);

byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String serverResponse = new String(receivePacket.getData(), 0, receivePacket.getLength());
System.out.println("Server says: " + serverResponse);
clientSocket.close();

注意事项

  • UDP数据包大小限制为64KB(包括头部),实际应用通常限制在1500字节以下以避免分片。
  • receive()方法是阻塞调用,需放在独立线程处理以避免界面卡顿。
  • 可通过setSoTimeout(int milliseconds)设置接收超时,超时后抛出SocketTimeoutException
  • 多网卡环境下需注意绑定正确的网络接口地址。

标签: 如何用java
分享给朋友:

相关文章

如何用java

如何用java

用Java实现基础功能 Java是一种广泛使用的编程语言,适用于开发各种应用程序。以下是几个常见功能的实现方法。 打印"Hello, World!" public class HelloWorl…

java如何输入数据

java如何输入数据

输入数据的方法 在Java中,输入数据可以通过多种方式实现,具体取决于输入来源(如控制台、文件、网络等)。以下是几种常见的方法: 使用Scanner类从控制台输入 Scanner类是Java中最常用…

如何安装java环境

如何安装java环境

下载JDK安装包 访问Oracle官方网站或OpenJDK项目页面,选择适合操作系统的JDK版本(如Windows、macOS或Linux)。确保下载与系统架构匹配的版本(32位或64位)。 运行安…

java中如何输入

java中如何输入

输入方法 在Java中,可以通过多种方式实现输入操作,具体取决于输入来源和需求。以下是几种常见的输入方法: 使用Scanner类 Scanner类是Java中最常用的输入工具,适用于从控制台或文件读…

如何用记事本写java

如何用记事本写java

使用记事本编写Java代码的方法 安装Java开发工具包(JDK)并配置环境变量。确保在命令行输入java -version和javac -version能正确显示版本信息。 创建一个新文本文件,将…

如何选择java培训

如何选择java培训

评估培训机构资质 选择有正规资质的机构,查看其营业执照、办学许可证等。优先考虑具备人力资源和社会保障部或教育部认证的机构,这类机构的教学质量和课程设置通常更规范。 考察课程内容与行业需求匹配度…