UDP三种通讯方式

这篇具有很好参考价值的文章主要介绍了UDP三种通讯方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单播 :单播用于两个主机之间的端对端通信
组播 :组播用于对一组特定的主机进行通信
广播 :广播用于一个主机对整个局域网上所有主机上的数据通信
单播实现
发送端
public class SendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象(DatagramSocket)
        // DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口
        DatagramSocket ds = new DatagramSocket();
        //创建数据,并把数据打包
        //DatagramPacket(byte[] buf, int length, InetAddress address, int port)
        //构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
        byte[] bys = "hello,udp,我来了".getBytes();
        DatagramPacket dp = new
            DatagramPacket(bys,bys.length,InetAddress.getByName("127.0.0.1"),10086);
        //调用DatagramSocket对象的方法发送数据
        //void send(DatagramPacket p) 从此套接字发送数据报包
        ds.send(dp);
        //关闭发送端
        //void close() 关闭此数据报套接字
        ds.close();
    }
}

接收端

public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //创建接收端的Socket对象(DatagramSocket)
        DatagramSocket ds = new DatagramSocket(12345);
        //创建一个数据包,用于接收数据
        byte[] bys = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bys, bys.length);
        //调用DatagramSocket对象的方法接收数据
        ds.receive(dp);
        //解析数据包,并把数据在控制台显示
        System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));
    }
}

组播实现

实现步骤

发送端

1. 创建发送端的 Socket 对象 (DatagramSocket)
2. 创建数据,并把数据打包 (DatagramPacket)
3. 调用 DatagramSocket 对象的方法发送数据 ( 在单播中 , 这里是发给指定 IP 的电脑但是在组播当中 , 这里
是发给组播地址 )
4. 释放资源
接收端
1. 创建接收端 Socket 对象 (MulticastSocket)
2. 创建一个箱子 , 用于接收数据
3. 把当前计算机绑定一个组播地址
4. 将数据接收到箱子中
5. 解析数据包 , 并打印数据
6. 释放资源
// 发送端
public class ClinetDemo {
    public static void main(String[] args) throws IOException {
        // 1. 创建发送端的Socket对象(DatagramSocket)
        DatagramSocket ds = new DatagramSocket();
        String s = "hello 组播";
        byte[] bytes = s.getBytes();
        InetAddress address = InetAddress.getByName("224.0.1.0");
        int port = 10000;
        // 2. 创建数据,并把数据打包(DatagramPacket)
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
        // 3. 调用DatagramSocket对象的方法发送数据(在单播中,这里是发给指定IP的电脑但是在组播当中,这里是发给组播地址)
        ds.send(dp);
        // 4. 释放资源
        ds.close();
    }
}
// 接收端
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        // 1. 创建接收端Socket对象(MulticastSocket)
        MulticastSocket ms = new MulticastSocket(10000);
        // 2. 创建一个箱子,用于接收数据
        DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
        // 3. 把当前计算机绑定一个组播地址,表示添加到这一组中.
        ms.joinGroup(InetAddress.getByName("224.0.1.0"));
        // 4. 将数据接收到箱子中
        ms.receive(dp);
        // 5. 解析数据包,并打印数据
        byte[] data = dp.getData();
        int length = dp.getLength();
        System.out.println(new String(data,0,length));
        // 6. 释放资源
        ms.close();
    }
}

广播实现文章来源地址https://www.toymoban.com/news/detail-419506.html

实现步骤
发送端
1. 创建发送端 Socket 对象 (DatagramSocket)
2. 创建存储数据的箱子 ,将广播地址封装进去,地址必须为255.255.255.255
3. 发送数据
4. 释放资源
接收端
1. 创建接收端的 Socket 对象 (DatagramSocket)
2. 创建一个数据包,用于接收数据
3. 调用 DatagramSocket 对象的方法接收数据
4. 解析数据包,并把数据在控制台显示
5. 关闭接收端
// 发送端
public class ClientDemo {
    public static void main(String[] args) throws IOException {
        // 1. 创建发送端Socket对象(DatagramSocket)
        DatagramSocket ds = new DatagramSocket();
        // 2. 创建存储数据的箱子,将广播地址封装进去
        String s = "广播 hello";
        byte[] bytes = s.getBytes();
        InetAddress address = InetAddress.getByName("255.255.255.255");
        int port = 10000;
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
        // 3. 发送数据
        ds.send(dp);
        // 4. 释放资源
        ds.close();
    }
}
// 接收端
public class ServerDemo {
    public static void main(String[] args) throws IOException {
        // 1. 创建接收端的Socket对象(DatagramSocket)
        DatagramSocket ds = new DatagramSocket(10000);
        // 2. 创建一个数据包,用于接收数据
        DatagramPacket dp = new DatagramPacket(new byte[1024],1024);
        // 3. 调用DatagramSocket对象的方法接收数据
        ds.receive(dp);
        // 4. 解析数据包,并把数据在控制台显示
        byte[] data = dp.getData();
        int length = dp.getLength();
        System.out.println(new String(data,0,length));
        // 5. 关闭接收端
        ds.close();
    }
}

到了这里,关于UDP三种通讯方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【React组件通讯的三种方式】

    React组件之间的通讯分为三种: 父组件 →子组件 子组件 →父组件 兄弟组件 步骤: 父组件提供要传递的state数据 给子组件标签添加属性,值为state中的数据 子组件中通过props接收父组件中传递的数据 项目演示: 使用脚手架生成一个React项目: npx create-react-app ex-app 运行项目

    2024年02月12日
    浏览(32)
  • 关于ROS的网络通讯方式TCP/UDP

    ROS 系列学习教程(总目录) TCP/IP协议族为传输层指明了两个协议:TCP和UDP,它们都是作为应同程序和网络操作的中介物。 TCP(Transmission Control Protocol)协议全称是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。 TCP是面向连接的、

    2024年02月05日
    浏览(40)
  • Apache配置虚拟主机三种方式(保姆级教学)

    由于本人很笨,第一次学步骤比较多。想学的可以耐下心来看、来学。 实验环境:ContOS 7,Apache服务器 在ContOS中可以运行一下代码直接下载 下载完可以查看下载的内容 配置Selinux文件 找到并改成下面的 SELINUX=disabled SELINUXTYPE=targeted 关闭防火墙 启动httpd服务,访问测试 然后在

    2024年02月03日
    浏览(45)
  • 14-3_Qt 5.9 C++开发指南_QUdpSocket实现 UDP 通信_UDP 单播和广播

    UDP(User Datagram Protocol,用户数据报协议)是轻量的、不可靠的、面向 数据报 (datagram) 、无连接的协议,它可以用于对可靠性要求不高的场合。与 TCP 通信不同, 两个程序之间进行 UDP 通信无需预先建立持久的 socket 连接,UDP 每次发送数据报都需要指定目标地址和端口 (如图14-6

    2024年02月14日
    浏览(45)
  • 韦根、RS485、TCP/IP三种门禁通讯方式的优缺点对比

    韦根通讯 韦根通讯协议是由摩托罗拉公司制定的一种通讯协议,具有国际统一标准。它适用于涉及门禁控制系统的读卡器和卡片的许多特性,是智能门禁最早使用的门禁通讯方式,但现在基本已经看不到它的身影了。 优点: 实现简单,基本上任意单片机都可以实现,成本低

    2024年02月13日
    浏览(57)
  • shell脚本使用(宿主机windows-服务器-centos)--用于使用shell脚本方式控制docker容器

    需求: 我想要使得windows上编写shell脚本,并且在这个shell脚本在linux中也可用 shell脚本在windows上无法直接运行,但是有WSL这个linux子系统的工具 可以使得shell脚本在主机上执行 视频讲解连接 方式1 方式2

    2024年02月07日
    浏览(47)
  • 虚拟机三种网络连接方式(桥接、NAT、仅主机、vlan)、Fusioncompute中的网络配置(OVS、DVS)

    我们通过VMware workstation 安装虚拟机的时候,需要配置我们的虚拟网卡。 需要在网络适配器那里进行配置,网络连接这里一般有三种模式,桥接模式,NAT模式和仅主机模式,如下图所示,那么这三种模式有什么区别呢? 1、桥接模式: 如下图所示,就很好的讲解了桥接的原理。

    2024年02月07日
    浏览(40)
  • Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)

    文章主人公:帅哥BUG😎 文章路人: 路人  🤨   路人  😛 😎: docker在容器中管理数据主要有三种方式哦~ 🤨:  啊!,我记得docker在容器中管理数据主要方式是这两种吧  - 数据卷(Volumes) - 挂载主机目录(Bind mounts)      😛:  额,主要的方式是这两种?我怎么记得是这

    2024年02月05日
    浏览(72)
  • springboot~jgroups实现节点间的通讯

    在 JGroups 中,集群(cluster)是一个由多个节点组成的逻辑实体,节点可以通过一个共享的集群名称来进行连接和通信。这个集群名称可以在配置中指定或在运行时动态创建。 JGroups 提供了多种方式来创建集群,并使节点能够加入到相同的集群中。下面是一些常见的方式: 静

    2024年02月08日
    浏览(31)
  • java计算两个日期间的天数

    1、精确到年月日 2、精确到秒,向下取值 如有问题,欢迎指正~ 如能帮到您,欢迎点赞收藏~

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包