java-网络编程UDP(2)

134 阅读2分钟
//        获取端口号        packet.getPort();//        获取ip地址        packet.getAddress();

UDP实现多发多收。

发送端代码

            DatagramSocket client = new DatagramSocket();//            创建数据包对象,封装数据            /**             * 封装发送的数据。             * 数据的大小             * 发送端的ip地址,             * 端口号             */            InetAddress service = InetAddress.getLocalHost();//            发送数据出去            Scanner sc = new Scanner(System.in);            while (true){                System.out.print("请输入您要输入的内容:");                String content = sc.nextLine();                byte[] data = content.getBytes();                DatagramPacket packet = new DatagramPacket(data,data.length, service, 8888);                client.send(packet);                if (content.equals("exit")) {                    //            发送玩数据之后可以关掉管道                    System.out.println("退出通道");                    client.close();                    break;                }            }

接收端数据

//        创建接收端对象        DatagramSocket socket = new DatagramSocket(8888);        byte[] buffer = new byte[1024 * 64];        while (true) {//        创建数据包对象,接收数据            DatagramPacket packet = new DatagramPacket(buffer,buffer.length);//        等待接收数据            socket.receive(packet);//        获取接收到的数据的大小            int size = packet.getLength();            String str = new String(buffer, 0,size);            if (str.equals("exit")) {                socket.close();                System.out.println("通道关闭");                break;            }            System.out.println("收到数据" + str + "=====" + "端口号" + packet.getPort() + "/" + packet.getAddress());        }

UDP通信

UDP实现广播

  1. 使用广播地址255.255.255.255

  2. 发送端,发送的数据包的目的地写的是广播地址,且制定端口(255.255.255.255 9999)

  3. 本机所在的网段的其他主机的程序只要拼配端口 号成功接收的消息即可

    // 创建数据包对象,封装数据 /** * 广播发送消息,将发送者的ip地址设置成255.255.255.255。端口号和接收者的端口号一致即可 * 封装发送的数据。 * 数据的大小 * 发送端的ip地址, * 端口号 */ InetAddress service = InetAddress.getByName("255.255.255.255");// 发送数据出去 Scanner sc = new Scanner(System.in); while (true){ System.out.print("请输入您要输入的内容:"); String content = sc.nextLine(); byte[] data = content.getBytes(); DatagramPacket packet = new DatagramPacket(data,data.length, service, 9999); client.send(packet); if (content.equals("exit")) { // 发送玩数据之后可以关掉管道 System.out.println("退出通道"); client.close(); break; } }

//        创建接收端对象        MulticastSocket socket = new MulticastSocket(9999);//        绑定对应组播地址//        socket.joinGroup(InetAddress.getByName("224.0.1.1"));        /**         * 第一个参数,是组播的地址。有两个参数一个ip地址一个是端口         * 第二个参数是接收端主机地址所在的网段。当下使用的是当前主机默认所在的网段         */        socket.joinGroup(new InetSocketAddress(InetAddress.getByName("224.0.1.1"), 9999), NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));

//            创建数据包对象,封装数据            /**             * 组播发送消息,将发送者的ip地址设置成组播范围内的任一个ip地址。端口号和接收者的端口号一致即可             * 封装发送的数据。             * 数据的大小             * 发送端的ip地址,             * 端口号             */            InetAddress service = InetAddress.getByName("224.0.1.1");