局域网内本机UDP通信测试

302 阅读1分钟

1.UPD测试发送端代码

package udp;

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

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

        //搜索放直接由系统指定
        DatagramSocket datagramSocket=new DatagramSocket();
        //发送一个数据
        String sendData = "hello world";
        byte[] requestDataBytes = sendData.getBytes();
        //设置数据和发送地址端口
        DatagramPacket requestPacket = new DatagramPacket(requestDataBytes,
                requestDataBytes.length);
        requestPacket.setAddress(InetAddress.getLocalHost());
        requestPacket.setPort(20000);
        //发送
        datagramSocket.send(requestPacket);
        //构建实体接受类
        final byte[] buf=new byte[512];
        DatagramPacket receivePackage = new DatagramPacket(buf, buf.length);
        //接收
        datagramSocket.receive(receivePackage);

        //打印接收到的发送者的信息
        String ip = receivePackage.getAddress().getHostAddress();
        int port = receivePackage.getPort();
        int dataLength = receivePackage.getLength();
        String data = new String(receivePackage.getData(), 0, dataLength);
        System.out.println("ip " + ip + ",port " + port + ",data " + data);

        //发送一个数据
        String responseData="receive data"+dataLength;
        byte[] responseDataBytes=responseData.getBytes();
        //原地址接口返回
        DatagramPacket responsePacket=new DatagramPacket(responseDataBytes,
                responseDataBytes.length,
                receivePackage.getAddress(),
                receivePackage.getPort());

        datagramSocket.send(responsePacket);
        System.out.println(" UDPSearcher close");
        datagramSocket.close();
    }
}

2.UDP接收端代码,接受端代码将接收到的字符串长度返回原接口,并不保证发送端接口可以接收到返回的数据

package udp;

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

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

        DatagramSocket datagramSocket=new DatagramSocket(20000);

        //构建实体接受类
        final byte[] buf=new byte[512];
        DatagramPacket receivePackage = new DatagramPacket(buf, buf.length);

        //接收
        datagramSocket.receive(receivePackage);

        //打印接收到的发送者的信息
        String ip = receivePackage.getAddress().getHostAddress();
        int port = receivePackage.getPort();
        int dataLength = receivePackage.getLength();
        String data = new String(receivePackage.getData(), 0, dataLength);
        System.out.println("ip " + ip + ",port " + port + ",data " + data);

        //发送一个数据
        String responseData="receive data"+dataLength;
        byte[] responseDataBytes=responseData.getBytes();
        //原地址接口返回
        DatagramPacket responsePacket=new DatagramPacket(responseDataBytes,
                responseDataBytes.length,
                receivePackage.getAddress(),
                receivePackage.getPort());

        datagramSocket.send(responsePacket);
        System.out.println("close");
        datagramSocket.close();
    }
}

3.测试结果
发送端:

image.png
接收端

image.png