Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

Java FAQ

java udp广播接收和发送


在 Java 中,使用 UDP 进行广播通信涉及到 UDP 数据包的发送和接收。UDP 广播适用于在局域网内广播消息,不需要建立连接,但不保证可靠性和顺序性。下面我将介绍几种不同的方式来实现 Java UDP 广播的接收和发送,包括步骤流程和示例代码。

使用 Java 的原生 Socket 类实现 UDP 广播

步骤流程:

  1. 创建 DatagramSocket 实例,指定本地端口。
  2. 创建 DatagramPacket 实例,用于发送或接收数据。
  3. 发送数据:创建目标地址( InetAddress )和目标端口,将数据填充到 DatagramPacket 中,然后使用 send() 方法发送。
  4. 接收数据:创建空的 DatagramPacket,接收数据后将数据填充到 DatagramPacket 中,然后使用 receive() 方法接收。

示例代码:

// 发送端
import java.net.*;

public class UDPSender {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();
        String message = "Hello, UDP Broadcast!";
        InetAddress address = InetAddress.getByName("255.255.255.255");
        int port = 8888;

        DatagramPacket packet = new DatagramPacket(message.getBytes(), message.length(), address, port);
        socket.send(packet);
        socket.close();
    }
}

// 接收端
import java.net.*;

public class UDPReceiver {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(8888);
        byte[] buffer = new byte[1024];

        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
        String receivedMessage = new String(packet.getData(), 0, packet.getLength());

        System.out.println("Received: " + receivedMessage);
        socket.close();
    }
}

使用第三方库实现 UDP 广播:Apache MINA

步骤流程:

  1. 添加 Apache MINA 依赖。
  2. 创建 IoAcceptor 实例来处理接收广播。
  3. 配置接收器的 IoHandler,处理接收到的数据。
  4. 创建 IoSession,用于发送数据。

Maven 依赖:

<dependency>
    <groupId>org.apache.mina</groupId>
    <artifactId>mina-core</artifactId>
    <version>2.1.3</version>
</dependency>

示例代码:

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.transport.socket.DatagramSessionConfig;
import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;

import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;

public class MinaUDPBroadcast {
    public static void main(String[] args) throws Exception {
        IoAcceptor acceptor = new NioDatagramAcceptor();
        acceptor.setHandler(new UDPIoHandler());

        DatagramSessionConfig dcfg = ((NioDatagramAcceptor) acceptor).getSessionConfig();
        dcfg.setReuseAddress(true);

        acceptor.bind(new InetSocketAddress(8888));
    }
}

class UDPIoHandler extends IoHandlerAdapter {
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        String receivedMessage = new String((byte[]) message, StandardCharsets.UTF_8);
        System.out.println("Received: " + receivedMessage);
    }
}

请注意,以上只是展示了两种实现 UDP 广播的方式。在实际应用中,您可以根据项目的需求选择最合适的方法。

在Java中,使用UDP(UserDatagramProtocol)发送和接收数据是一种非连接、无状态的网络通信方式。###方式一:使用纯J ...
术语广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在相应的元素上进行。如果两个阵列具有完全相同的形状,则 ...
我将为你介绍两种常见的方式:基于原生Java套接字(Socket)的实现和使用第三方库Netty的实现。###Maven依赖###Gradl ...
请注意,UDP是一种无连接的协议,因此在使用UDP传输文件时需要考虑数据完整性和可靠性的问题。###方式一:基本UDP传输这种方式通过UDP ...
在Java中,你可以使用不同的方式来接收一个List参数,例如在一个Controller中接收HTTP请求的List参数。添加SpringW ...