java傳送接收組播(多播)資料包(UDP包)

資料架構師發表於2017-10-08

全棧工程師開發手冊 (作者:欒鵬)

java教程全解

java傳送組播(多播)資料包。首先要加入組播組,然後才能向組播組傳送組播資料包和接收組播資料包。

以下程式碼,在區域網中測試有效。

測試程式碼

public static void main(String[] args) 
{
    final MulticastSocket socket=createMulticastGroupAndJoin("224.0.0.0",5000);  //加入組播組,設定組播組的監聽埠為5000
    new Thread(new Runnable() {
        @Override
        public void run() {
            sendData(socket,"luanpeng".getBytes(),"224.0.0.0");  //向組播組傳送資料
        }
    }).start();
    String message = recieveData(socket,"224.0.0.0");//接收組播組傳來的訊息
    System.out.println(message);
}

建立一個組播組,並加入此組播組,多播地址為D類ip,目的地址為224.0.0.0~239.255.255.255

public static MulticastSocket createMulticastGroupAndJoin(String groupurl,int port) // 建立一個組播組並加入此組的函式
{
    try {
        InetAddress group = InetAddress.getByName(groupurl); // 設定組播組的地址為239.0.0.0
        MulticastSocket socket = new MulticastSocket(port); // 初始化MulticastSocket類並將埠號與之關聯
        socket.setTimeToLive(1); // 設定組播資料包的傳送範圍為本地網路
        socket.setSoTimeout(10000); // 設定套接字的接收資料包的最長時間
        socket.joinGroup(group); // 加入此組播組
        return socket;
    } catch (Exception e1) {
        System.out.println("Error: " + e1); // 捕捉異常情況
        return null;
    }
}

向組播組傳送資料的函式,以UDP形式傳送

public static void sendData(MulticastSocket socket,byte[] data,String groupurl) // 向組播組傳送資料的函式
{
    try {
        InetAddress group=InetAddress.getByName(groupurl);
        // 儲存在陣列中
        DatagramPacket packet = new DatagramPacket(data, data.length, group, socket.getPort()); // 初始化DatagramPacket
        socket.send(packet); // 通過MulticastSocket例項埠向組播組傳送資料
        util.out("以UDP形式傳送組播報文");
    } catch (Exception e1) {
        System.out.println("Error: " + e1); // 捕捉異常情況
    }
}

從組播組接收資料的函式

public static String recieveData(MulticastSocket socket,String groupurl) 
{
    String message;
    try {
        InetAddress group=InetAddress.getByName(groupurl);
        byte[] data = new byte[512];
        DatagramPacket packet=new DatagramPacket(data, data.length,group,socket.getPort());
        socket.receive(packet); // 通過MulticastSocket例項埠從組播組接收資料
        // 將接受的資料轉換成字串形式
        message = new String(packet.getData());
    } catch (Exception e1) {
        System.out.println("Error: " + e1); // 捕捉異常情況
        message = "Error: " + e1;
    }
    return message;
}

相關文章