要接收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)中。