【从零开始学习JAVA | 第四十三篇】UDP的三种通信方式

news/2024/5/18 11:52:16 标签: 学习, udp, 网络协议

目录

前言:

UDP三种通信方式: 

单播:

组播: 

广播: 

三种通信方式的应用场景:

总结:


前言:

        在我们初学网络编程的时候,我们就介绍过两个极其重要的协议,分别是TCP协议和UDP协议,我们在今天就要介绍一下UDP协议的三种通信方式。

UDP三种通信方式: 

单播:

单播(Unicast):单播是指将数据从一个发送方传输到一个接收方的通信方式。在UDP中,单播是最常见的通信方式,发送方通过指定接收方的IP地址和端口号,将数据直接发送给接收方。

import java.net.*;

public class UnicastSender {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();
        String message = "This is a unicast message";
        InetAddress receiverAddress = InetAddress.getByName("192.168.0.100");
        int receiverPort = 12345;
        byte[] buffer = message.getBytes();
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, receiverAddress, receiverPort);
        socket.send(packet);
        socket.close();
    }
}

public class UnicastReceiver {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket(12345);
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
        String message = new String(packet.getData(), 0, packet.getLength());
        System.out.println("Received unicast message: " + message);
        socket.close();
    }
}

组播: 

多播(Multicast):多播是指将数据从一个发送方传输到一组接收方的通信方式。发送方将数据发送到一个特定的多播组地址,该组地址由一组接收方共享。接收方只需加入该多播组,便可以接收到发送方发送的数据。多播适用于需要将同一份数据发送给一组接收方的场景,比如视频直播和多人游戏。

import java.net.*;

public class MulticastSender {
    public static void main(String[] args) throws Exception {
        MulticastSocket socket = new MulticastSocket();
        String message = "This is a multicast message";
        InetAddress multicastAddress = InetAddress.getByName("224.0.0.1");
        int multicastPort = 12345;
        byte[] buffer = message.getBytes();
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, multicastPort);
        socket.send(packet);
        socket.close();
    }
}

public class MulticastReceiver {
    public static void main(String[] args) throws Exception {
        InetAddress multicastAddress = InetAddress.getByName("224.0.0.1");
        int multicastPort = 12345;
        MulticastSocket socket = new MulticastSocket(multicastPort);
        socket.joinGroup(multicastAddress);

        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
        String message = new String(packet.getData(), 0, packet.getLength());
        System.out.println("Received multicast message: " + message);

        socket.leaveGroup(multicastAddress);
        socket.close();
    }
}

广播: 

广播(Broadcast):广播是指将数据从一个发送方传输到网络中的所有接收方的通信方式。发送方发送的数据被复制到网络中的所有节点,所有的接收方都可以接收到这份数据。广播适用于需要将同一份数据发送给网络中的所有设备的场景,比如网络管理和设备发现。需要注意的是,在现代网络中,对广播进行了一定的限制和控制,以防止滥用和网络拥堵。

import java.net.*;

public class BroadcastSender {
    public static void main(String[] args) throws Exception {
        DatagramSocket socket = new DatagramSocket();
        String message = "This is a broadcast message";
        InetAddress broadcastAddress = InetAddress.getByName("255.255.255.255");
        int broadcastPort = 12345;
        socket.setBroadcast(true);
        byte[] buffer = message.getBytes();
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length, broadcastAddress, broadcastPort);
        socket.send(packet);
        socket.close();
    }
}

public class BroadcastReceiver {
    public static void main(String[] args) throws Exception {
        int broadcastPort = 12345;
        DatagramSocket socket = new DatagramSocket(broadcastPort);

        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
        socket.receive(packet);
        String message = new String(packet.getData(), 0, packet.getLength());
        System.out.println("Received broadcast message: " + message);

        socket.close();
    }
}

三种通信方式的应用场景:

  1. 单播(Unicast):

    • 点对点通信:当需要将数据从一个发送方传输到一个具体的接收方时,单播是最常见的通信方式。例如,文件传输、Web请求、一对一视频通话等场景都可以使用单播通信。
  2. 组播(Multicast):

    • 多人实时通信:组播适用于需要将同一份数据发送给一组接收方的场景。例如,视频会议、多人游戏、实时音频广播等。通过使用组播,发送方只需将数据发送到一个特定的组播组地址,而不必逐个发送给每个接收方。
  3. 广播(Broadcast):

    • 网络管理:广播常用于进行网络管理和设备发现,例如在本地网络中查找可用的服务器或设备。
    • 网络广播:广播适用于将同一份数据发送给网络中的所有设备。例如,网络广播可以用于向所有设备发送重要通知、紧急警报等。

需要注意的是,随着网络安全的重要性提升,对于组播和广播的使用可能受到一些限制和控制,以防止滥用和网络拥堵。在现代网络中,使用组播和广播功能时需要谨慎,并遵守网络管理的规定和最佳实践。

总结:

        本篇文章我们介绍了UDP的三种通信方式,他们有着不同的应用场景。我们需要了解这三种通讯方式的使用方式和特点。

如果我的内容对你有帮助,请点赞,评论,收藏创作不易,大家的支持就是我坚持下去的动力!

 

        


http://www.niftyadmin.cn/n/4925212.html

相关文章

探索 Go 语言中 iota 的神奇力量,优雅定义常量!

大家好!在今天的文章中,我将为大家介绍一下关于 golang 中的 iota 的使用技巧和注意事项。作为一种枚举常量生成器,iota 在 golang 中被广泛使用,可以简化代码和提高可读性。下面就让我们来了解一些关键的使用技巧和注意事项吧&am…

Java分布式微服务4——异步服务通讯(RabbitMQ)中间件

文章目录 微服务的远程异步调用MQ介绍RabbitMQRabbitMQ结构RabbitMQ的单机部署1.下载镜像2.安装MQ RabbitMQ入门常见消息模型 SpringAMQPSpringAMQP实现基础消息队列SpringAMQP实现工作队列SpringAMQP实现发布订阅1. Fanout Exchange 广播模式2. Direct Exchange 路由模式3. To…

冶金化工操作VR虚拟仿真实验软件提高员工们协同作业的配合度

对于高风险行业来说,开展安全教育培训是企业的重点工作,传统培训逐渐跟不上时代变化和工人需求,冶金安全VR模拟仿真培训系统作为一种新型的教育和培训工具,借助VR虚拟现实技术为冶金行业的工人提供一个安全、高效的培训环境。 冶金…

欧拉操作系统添加磁盘

1、查看磁盘空间 fdisk -l 2、创建新磁盘分区 fdisk /dev/vda 欢迎使用 fdisk (util-linux 2.37.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 This disk is currently in use - repartitioning is probably a bad idea. Its recommended…

手势识别rtos小车(1)----手部识别

1.安装mediapipe库和cv2库 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simplepip install Mediapipe0.8.9.1 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package 这里我主要还是弄明白了这个pycharm编辑器和项目之间的关系,我在这里…

【Linux】网络基础1

文章目录 网络基础11. 计算机网络背景1.1 网络发展 2. 认识协议2.1 网络协议2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程3. 1 数据报封装和分用 4. 网络中的地址管理4.1 认识IP地址 5. 认识MAC地址 网络基础1 1. 计算机网络背景 1…

实战指南:使用OpenCV 4.0+Python进行机器学习与计算机视觉

💂 个人网站:【办公神器】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 1.背景2. 安装和配…

【C++】C++回调函数基本用法(详细讲解)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…