JavaでUDPパケットを受信する方法

UDPパケットを受信するには、JavaのDatagramSocketクラスを使用できます。

まず、指定した UDP ポートをリッスンするための DatagramSocket オブジェクトを作成します。たとえば、ポート番号 9999 の UDP パケットをリッスンするには、以下のようなコードを使用できます。

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

その後、受信したデータを格納するバイト配列を作成します。配列のサイズは必要に応じて調整することができます。

byte[] buffer = new byte[1024];

次にデータ受信用のDatagramPacketオブジェクトを作成する。コンストラクタには先ほど作成したバイト配列と配列の長さを渡す。

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

その後、DatagramSocketのreceive()メソッドを使ってUDPパケットを受け取る。このメソッドはパケットを受信するまでブロックされる。

socket.receive(packet);

最後に、DatagramPacketのgetData()メソッドで受信データを獲得し、状況に合わせて処理します。

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();
        }
    }
}

注意:上記のコードは1つのUDPパケットしか受信できません。複数のパケットを連続的に受信する場合は、パケットを受信するコードをループに配置します。

bannerAds