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

news2024/9/24 21:27:47

目录

前言:

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.coloradmin.cn/o/854459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python之特殊属性、对象的浅拷贝和深拷贝

一、特殊属性 Python对象中包含了很多双下划线开始和结束的属性,这些是特殊属性,有特殊用法。这里我们列出常见的特殊属性: 特殊属性含义obj.__dict__对象的属性字典obj.__class__对象所属的类class.__bases__表示类的父类(多继承时&#x…

solidworks(2)

记得选择双向

【100天精通python】Day26:文件和IO操作_文件指针的定位与移动,序列化与反序列化

目录 专栏导读 1 文件的基本操作 1.1 参考 1.2 获取文件属性: 2 定位和移动文件指针 3 序列化和反序列化 3.1 序列化与反序列化概述 3.2JSON序列化与反序列化 JSON序列化: JSON反序列化: 3.3 pickle 序列化与反序列化 pickle 序列…

CTF REVERSE练习之病毒分析

首先介绍两个知识点,在后面的实验中运用到的。 1、7Zip 7-Zip 是一款开源软件。我们可以在任何一台计算机上使用 7-Zip ,包括用在商业用途的计算机。7-Zip 适用于 Windows 7 / Vista / XP / 2008 / 2003 / 2000 / NT / ME / 98。并且有面向 Mac OS X、…

开发中常用的数据库日志都长啥样呢?

目录 常见日志级别 数据库日志 Undo log 逻辑日志 redolog binlog 慢查询日志 AOF 文本文件 RDB 二进制文件 常见日志级别 DEBUG:用于详细记录应用程序的运行过程,如变量值、执行流程等。DEBUG级别的日志通常用于开发和调试过程中,以…

不看后悔一辈子!不看错过50K!历尽心血总结Redis全局命令

前言: 📕作者简介:热爱编程的敖云岚,致力于C、Java、Python等多编程语言,热爱编程和长板的运动少年! 📘相关专栏:Java基础语法,JavaEE初阶,数据库&#xff0c…

【Python】单元测试框架unitest及其高级应用

目录 Unittest 简单使用示例 重要概念 断言方法 深入 高级应用 认识Page Object 资料获取方法 Unittest Unittest是python的一个单元测试框架,但是它不仅适用于单元测试,还适用自动化测试用例的开发与执行。我们可以很方便的使用它组织执行测试用…

JVM垃圾回收篇-垃圾回收算法

JVM垃圾回收篇-垃圾回收算法 标记清除(Mark Sweep) 概念 collector指的就是垃圾收集器。 mutator是指除了垃圾收集器之外的部分,比如说我们的应用程序本身。 mutator的职责一般是NEW(分配内存)、READ(从内存中读取内容)、WRITE(将内容写入内…

CSMA/CD协议原理

共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号也会沿着总线传播到总线上的其他各站点 。 当某个站点在总线上发送顿时,此时,如果总线上的其他站点也要在总线当某个站点在总线上发送顿…

Qt应用开发(基础篇)——时间微调输入框 QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类,这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件,父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

资深java程序员的IDEA的常用设置

设置入口 打开项目以后也可以在左上角File-->setting进行设置,不过部分设置的是该项目的,换个项目可能就变了,建议打开项目之前就设置。 一般新的idea软件默认是下图页面,或者打开项目后可以点击File-->Close Project退到…

【CI/CD】Git Flow 分支模型

Git Flow 分支模型 1.前言 Git Flow 模型(本文所阐述的分支模型)构思于 2010 年,也就是 Git 诞生后不久,距今已有 10 多年。在这 10 多年中,Git Flow 在许多软件团队中大受欢迎。 在这 10 多年里,Git 本身…

C++异常使用

异常关键字: try:在try部可检测异常 catch:当发现异常捕获处 throw:抛出异常处 noexcept:被修饰函数内部不会发生异常 允许抛出和捕捉各种类型的数据。 int main() {try{func();}catch(const char*e){ //捕捉字符…

计算机是怎么存储和识别人类高级语言的

目录 1、计算机是怎么“存储”人类的高级语言的?2、 UTF-8和UTF-32的区别3、UTF-8是如何区分字节的长度呢?(即如何识别这一串二进制是多少个字节的?)4、计算机是如何识别人类的高级语言的? 1、计算机是怎么…

idea如何开启多个客户端(一个代码开启多个客户端运行)

1.在编程界面UdpEchoClient的下拉列表中找到Edit Configurations...并点击 2.点击Modify options 3.点击Allow multiple instances将其勾选上 4.点击ok 在经历了以上的设置以后,再次运行客户端的程序便会创建一个新的客户端运行(有了一个新的运行窗口&am…

【AI】《动手学-深度学习-PyTorch版》笔记(十四):多层感知机

AI学习目录汇总 1、多层感知机网络结构 1.1 线性模型:softmax回归 在前面介绍过,使用softmax回归来处理分类问题时,每个输出通过都一个仿射函数计算,网络结构如下,输入和输出之间为全链接层: 1.2 多层感知机 多层感知机就是在输入和输出中间再添加一个或多个全链接…

解数独(Java)

题目链接: 力扣 题目详情: 37. 解数独t编写一个程序,通过填充空格来解决数独问题。 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只…

研发工程师玩转Kubernetes——使用emptyDir在同一Pod不同容器间共享数据

kubernets可以通过emptyDir实现在同一Pod的不同容器间共享文件系统。 正如它的名字,当Pod被创建时,emptyDir卷会被创建,这个时候它是一个空的文件夹;当Pod被删除时,emptyDir卷也会被永久删除。 同一Pod上不同容器之间…

【数据分析】pandas (三)

基本功能 在这里,我们将讨论pandas数据结构中常见的许多基本功能 让我们创建一些示例对象: index pd.date_range(“1/1/2000”, periods8) s pd.Series(np.random.randn(5), index[“a”, “b”, “c”, “d”, “e”]). df pd.DataFrame(np.random.…