UDP-局域網搜索案例

工具idea

1.接收者代碼

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UDPProvider {

    public static void main(String[] args) throws IOException {
        System.out.println("UDPProvider start");

        //作爲接收者,指定一個端口用於接收
        DatagramSocket ds = new DatagramSocket(20000);

        //構建接收實體
        final byte[] buf = new byte[512];
        DatagramPacket receivePack = new DatagramPacket(buf,buf.length);

        //接收
        ds.receive(receivePack);

        //打印接收到的信息與發送者的信息
        //發送者的IP地址
        String ip = receivePack.getAddress().getHostAddress();
        int port = receivePack.getPort();
        int dataLen = receivePack.getLength();
        String data = new String(receivePack.getData(),0,dataLen);
        System.out.println("UDPProvider receive from ip" + ip
            + "\tport:" + port +"\tdata" + data);

        //構建回送信息
        String responseData = "Receive data with len:" + dataLen;
        byte[] responseDataBytes = responseData.getBytes();

        DatagramPacket responsePack = new DatagramPacket(responseDataBytes,
                responseDataBytes.length,
                receivePack.getAddress(),
                receivePack.getPort());
        ds.send(responsePack);

        ds.close();
    }
}

2.搜索方代碼

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPSearcher {

    public static void main(String[] args) throws IOException {
        System.out.println("UDPSearcher start");

        //作爲搜索方,系統自動分配端口
        DatagramSocket ds = new DatagramSocket();

        //構建回送信息
        String responseData = "HelloWorld";
        byte[] responseDataBytes = responseData.getBytes();

        DatagramPacket requestPack = new DatagramPacket(responseDataBytes,
                responseDataBytes.length);
        //本機20000端口
        requestPack.setAddress(InetAddress.getLocalHost());
        requestPack.setPort(20000);
        ds.send(requestPack);

        //構建接收實體
        final byte[] buf = new byte[512];
        DatagramPacket receivePack = new DatagramPacket(buf,buf.length);

        //接收
        ds.receive(receivePack);

        //打印接收到的信息與發送者的信息
        //發送者的IP地址
        String ip = receivePack.getAddress().getHostAddress();
        int port = receivePack.getPort();
        int dataLen = receivePack.getLength();
        String data = new String(receivePack.getData(),0,dataLen);
        System.out.println("UDPSearcher receive from ip" + ip
                + "\tport:" + port +"\tdata:" + data);

        ds.close();
    }
}

運行效果: 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章