基本知识

UDP基于广播数据报的传输协议。

UDP编程,在java中主要用到的类
 1. java.net.DatagrmSocket:客户端/服务端,负责发送或者接收报文。
 2. java.net.DatagrmPacket:数据报
 3. UDP编程并有没客户端和服务端一说,谁都可以做客户端/服务端。

192.168.10.255 , 255是广播地址,在192.168.10网段中所有人都会接收到数据。

UDP程序示例

发送数据工程程序
public class DataSender {

    public static void main(String[] args) throws IOException {
        //用于发送广播的socket
        DatagramSocket socket = new DatagramSocket();

        //发送的数据
        String str = "Hello world";

        //目标电脑 InetSocketAddress是SocketAddress的子类
        InetSocketAddress target = new InetSocketAddress("192.168.1.100", 6789);

        byte[] b = str.getBytes();
        //数据报
        DatagramPacket packet =  new DatagramPacket(b, 0, b.length, target);

        //发送数据报
        socket.send(packet);
        System.out.println("数据发送完成......");
        socket.close();
    }
}
接收数据工程
public class DataReceive {
    public static void main(String[] args) throws IOException {
        //在本机监听6789端口
        DatagramSocket socket = new DatagramSocket(6789);

        //用于接收数据报
        byte[] buf = new byte[1024];
        //数据报
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        //接收数据
        socket.receive(packet);
        //将byte数据转为字符串
        String str = new String(buf, 0, packet.getLength());
        System.out.println("接收到的数据是: " + str);
    }
}

  一定要先执行接收端程序,再执行发送端程序,因为UDP网络编程是广播形式发送数据,就是发送端执行到send()方法时,就把数据广播出去了,至于你接不接收,发送端是不管的,所有只有先执行接收端程序,让其等待广播才能对数据进行接收。