java怎么接收udp報(bào)文

小億
221
2023-11-08 15:05:06

要接收UDP報(bào)文,可以使用Java的DatagramSocket類(lèi)。

首先,創(chuàng)建一個(gè)DatagramSocket對(duì)象來(lái)監(jiān)聽(tīng)指定的UDP端口。例如,要監(jiān)聽(tīng)端口號(hào)為9999的UDP報(bào)文,可以使用以下代碼:

int port = 9999;
DatagramSocket socket = new DatagramSocket(port);

然后,創(chuàng)建一個(gè)字節(jié)數(shù)組來(lái)存儲(chǔ)接收到的數(shù)據(jù)??梢愿鶕?jù)實(shí)際情況調(diào)整數(shù)組的大小。

byte[] buffer = new byte[1024];

接下來(lái),創(chuàng)建一個(gè)DatagramPacket對(duì)象用于接收數(shù)據(jù)。在構(gòu)造方法中,傳入之前創(chuàng)建的字節(jié)數(shù)組和數(shù)組的長(zhǎng)度。

DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

接著,使用DatagramSocket的receive()方法接收UDP報(bào)文。此方法會(huì)阻塞,直到接收到報(bào)文為止。

socket.receive(packet);

最后,可以通過(guò)DatagramPacket的getData()方法獲取接收到的數(shù)據(jù),并根據(jù)實(shí)際情況進(jìn)行處理。

byte[] receivedData = packet.getData();
int length = packet.getLength();
String message = new String(receivedData, 0, length);

完整的代碼如下:

import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceiver {
    public static void main(String[] args) {
        try {
            int port = 9999;
            DatagramSocket socket = new DatagramSocket(port);
            
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
            
            socket.receive(packet);
            
            byte[] receivedData = packet.getData();
            int length = packet.getLength();
            String message = new String(receivedData, 0, length);
            
            System.out.println("Received message: " + message);
            
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意:以上代碼只能接收一個(gè)UDP報(bào)文。如果需要連續(xù)接收多個(gè)報(bào)文,可以將接收?qǐng)?bào)文的代碼放在一個(gè)循環(huán)中。

0