UDP通信

作者: xqiiitan | 来源:发表于2024-05-30 17:25 被阅读0次

UDP如何实现广播:

使用广播地址:255.255.255.255
a. 发送端发送的数据包的目的地写的是广播地址、且指定端口。(255.255.255.255,9999)
b. 本机所在网段的其他主机的程序只要匹配端口成功即就可以收到消息了。 (9999)

1.单发单收

// 研究UDP广播,发送AP的名称和密码。发送端
// 接受方收到ap+密码后,执行连接AP功能。

public class ClientUDP {
    public static void main(String[] args) throws Exception {
        System.out.println("+++++++++ClientUDP++++++++++++++");
        // 发送方socket对象。
        DatagramSocket socket = new DatagramSocket(); // 发送方自带默认的端口号.
        byte[] buffer = "789798发送的内容888".getBytes();
        // 参数3:服务端的ip(InetAddress.getLocalHost() ); 服务端的端口
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"), 8888);
        // 发送数据出去
        socket.send(packet);
        socket.close();
    }
}
/**
 * 接收端
 */
public class ServerDemo {

    public static void main(String[] args) throws Exception {
        System.out.println("+++++++++ServerDemo++++++++++++++");
        // 1.接收端对象,注册端口。接收端socket对象。
        DatagramSocket socket = new DatagramSocket(8888);
        // 2.创建一个数据包对象,接收数据。
        byte[] buffer = new byte[1024]; //64kb
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        // 3. 等待,接收数据
        socket.receive(packet);
        // 4.取出buffer中的数据
        int len = packet.getLength();
        String result = new String(buffer, 0, len);
        System.out.println("收到数据:" + result);
        // 获取发送方的ip+端口
        String ip = packet.getSocketAddress().toString();
        int port = packet.getPort();
        System.out.println("对方的ip和断开:" + ip);
        System.out.println("port:" + port);

        socket.close(); // 5.关闭通道
    }
}

2. 多发多收

// 研究UDP广播,发送AP的名称和密码。发送端
// 接受方收到ap+密码后,执行连接AP功能。
public class ClientUDP {

    public static void main(String[] args) throws Exception {
        System.out.println("+++++++++ClientUDP++++++++++++++");
        // 发送方socket对象。
        DatagramSocket socket = new DatagramSocket(); // 发送方自带默认的端口号.可自定义为7777

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请说话:");
            String msg = sc.nextLine();
            if ("exit".equals(msg)) {
                System.out.println("离线了");
                socket.close();
                break;
            }
            byte[] buffer = msg.getBytes();
            // 2.创建1个数据包对象封装数据。参数3:服务端的ip(InetAddress.getLocalHost() ); 服务端的端口
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("127.0.0.1"), 8888);
            // 3.发送数据出去
            socket.send(packet);
        }
    }
}
/**
 * 接收端
 */
public class ServerDemo {

    public static void main(String[] args) throws Exception {
        System.out.println("+++++++++ServerDemo++++++++++++++");
        // 1.接收端对象,注册端口。接收端socket对象。
        DatagramSocket socket = new DatagramSocket(8888);
        // 2.创建一个数据包对象,接收数据。
        byte[] buffer = new byte[1024]; //64kb
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

        while (true) {
            // 3. 等待,接收数据
            socket.receive(packet);
            // 4.取出buffer中的数据
            int len = packet.getLength();
            String result = new String(buffer, 0, len);
            System.out.println("收到数据:" + result);
            // 获取发送方的ip+端口
            System.out.println("对方的ip和端口:" + packet.getAddress() + " 端口:" + packet.getPort());
        }
    }
}

3. 广播

public class ClientUDP {

    public static void main(String[] args) throws Exception {
        System.out.println("+++++++++ClientUDP++++++++++++++");
        // 发送方socket对象。
        DatagramSocket socket = new DatagramSocket(); // 发送方自带默认的端口号.可自定义为7777

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请说话:");
            String msg = sc.nextLine();
            if ("exit".equals(msg)) {
                System.out.println("离线了");
                socket.close();
                break;
            }
            byte[] buffer = msg.getBytes();
            // 2.创建1个数据包对象封装数据。参数3:服务端的ip(InetAddress.getLocalHost() ); 服务端的端口
            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("255.255.255.255"), 9999);
            // 3.发送数据出去
            socket.send(packet);
        }
    }
}
public class ServerDemo {

    public static void main(String[] args) throws Exception {
        System.out.println("+++++++++ServerDemo++++++++++++++");
        // 1.接收端对象,注册端口。接收端socket对象。
        DatagramSocket socket = new DatagramSocket(9999);
        // 2.创建一个数据包对象,接收数据。
        byte[] buffer = new byte[1024]; //64kb
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

        while (true) {
            // 3. 等待,接收数据
            socket.receive(packet);
            // 4.取出buffer中的数据
            int len = packet.getLength();
            String result = new String(buffer, 0, len);
            System.out.println("收到数据:" + result);
            // 获取发送方的ip+端口
            System.out.println("对方的ip和端口:" + packet.getAddress() + " 端口:" + packet.getPort());
        }
    }
}

相关文章

  • GO语言初级学习之代码案例12 (UDP通信)

    @(go语言 黑马)[GO语言] UDP通信 题目:编写UDP通信的并发服务器和客户端 知识点:UDP通信 逻辑思...

  • UDP通信工具

    UDP通信工具

  • Linux C应用编程-6-网络通信

    1.TCP通信 1)TCP进程服务器 2)TCP客户端 2.UDP通信 1)UDP服务器 2)UDP客户端

  • UDP通信

    UDP - 面向无连接, 不安全的传输层协议.API: 服务端代码 客户端代码:

  • TCP与UDP

    TCP和UDP的区别 TCP是面向连接的通信服务UDP是面向无连接的通信服务 TCP提供可靠的数据传输UDP是不可...

  • 网络编程-TCP

    1.tcp的相关介绍 udp通信模型: udp通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可...

  • 小程序UDP通信

    前言 UDP通信分为单播 广播 组播,基础库2.7.0之后,小程序开始支持UDP通信,目前小程序只支持单播。 小程...

  • QT udp通信--Apple的学习笔记

    一,前言 之前做的都是QT的TCP通信,从来没做过QT的udp通信,所以我从自己的小小代码库中找不到udp通信的最...

  • Linux下Socket编程(六)——udp

    简介 udp协议 udp通信流程 示例 udp协议 中文叫用户数据报协议,属于传输层。UDP是面向非连接的协议,它...

  • 2018-10-20Ubuntu系统计算机和Makeblock通

    一、系统和硬件概况 二、WIFI UDP通信--计算机为UDP Client, Makeblock Me wifi...

网友评论

      本文标题:UDP通信

      本文链接:https://www.haomeiwen.com/subject/edvhmdtx.html