Java UDP通信详解:单播、广播、组播

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

UDP协议介绍

1.UDP是一种无连接、不可靠传输的协议;
2.将数据源IP、目的地IP和端口封装成数据包,不需要建立连接 ;
3.每个数据包的大小限制在64KB内;
4.发送不管对方是否准备好,接收方收到也不确认,故是不可靠的;
5.可以广播发送 ,发送数据结束时无需释放资源,开销小,速度快;

UDP协议通信场景
语音通话,视频会话等。

UDP协议通信模型演示
Java UDP通信详解:单播、广播、组播

数据包对象、数据包

DatagramPacket:数据包对象

构造器
Java UDP通信详解:单播、广播、组播
常用方法
Java UDP通信详解:单播、广播、组播


DatagramSocket:发送端和接收端对象

构造器

构造器 说明
public DatagramSocket()​ 创建发送端的Socket对象,系统会随机分配一个端口号
public DatagramSocket(int port) 创建接收端的Socket对象并指定端口号

常用方法

方法 说明
public void send(DatagramPacket dp) 发送数据包
public void receive(DatagramPacket p) 接收数据包

单播:一对一、多对一

单台主机与单台主机之间的通信。

要使接收端同时接收多台设备的消息,只需接收端保持运行状态,多个发送端都填写正确的接收端地址和端口即可。

发送端实现步骤

Java UDP通信详解:单播、广播、组播
代码示例

public class ClientDemo1 {
    public static void main(String[] args) throws Exception {
        System.out.println("=====客户端启动======");

        // 1、创建发送端对象:发送端自带默认的端口号
        DatagramSocket socket = new DatagramSocket();

        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;
            }

            // 2、创建一个数据包对象封装数据
            byte[] buffer = msg.getBytes();
            DatagramPacket packet = new DatagramPacket( buffer, buffer.length,InetAddress.getLocalHost() , 8888);

            // 3、发送数据出去
            socket.send(packet);
        }
		
		socket.close();
    }
}

接收端实现步骤

Java UDP通信详解:单播、广播、组播
代码示例

public class ServerDemo2 {
    public static void main(String[] args) throws Exception {
        System.out.println("=====服务端启动======");
        // 1、创建接收端对象:注册端口
        DatagramSocket socket = new DatagramSocket(8888);

        // 2、创建一个数据包对象接收数据
        byte[] buffer = new byte[1024 * 64];
        DatagramPacket packet = new DatagramPacket(buffer, buffer.length);

        while (true) {
            // 3、等待接收数据。
            socket.receive(packet);
            // 4、取出数据即可
            // 读取多少倒出多少
            int len = packet.getLength();
            String rs = new String(buffer,0, len);
            System.out.println("收到了来自:" + packet.getAddress() +", 对方端口是" + packet.getPort() +"的消息:" + rs);
        }
    }
}

广播:一对多通讯

当前主机与所在网络中的所有主机通信。

Java UDP通信详解:单播、广播、组播
UDP如何实现广播
使用广播地址:255.255.255.255

具体操作
1.发送端发送的数据包的目的地写的是广播地址、且指定端口;
2.本机所在网段的其他主机的程序只要注册对应端口即可;

发送端代码示例

public class client {
    public static void main(String[] args) throws Exception {
        System.out.println("=====发送端启动======");

        // 1、创建发送端对象:发送端自带默认的端口号
        DatagramSocket socket=new DatagramSocket();

        // 2、创建一个数据包对象封装数据

        byte[] buffer="UDP广播测试".getBytes();
         只要目的地IP是 255.255.255.255 这个消息将以广播的形式对外发送
        DatagramPacket packet=new DatagramPacket(buffer,buffer.length,InetAddress.getByName("255.255.255.255"),9999);

        // 3、发送数据出去
        socket.send(packet);

        socket.close();
    }
}

接收端代码示例

public class serve {
    public static void main(String[] args) throws Exception {
        System.out.println("=====接收端启动======");

        // 1.创建一个接受端对象,注册端口
        DatagramSocket socket=new DatagramSocket(9999);

        // 2.创建一个数据包对象,封装接受的数据
        byte[] buffer=new byte[1024*64];
        DatagramPacket packet=new DatagramPacket(buffer,buffer.length);

        //3.等待接收消息
        socket.receive(packet);

        //4.打印接收的内容
        int len=packet.getLength();
        String rs=new String(buffer,0,len);
        System.out.println("收到了IP为:"+packet.getAddress()+"\n端口为:"+packet.getPort()+" 的消息");
        System.out.println("消息内容:"+rs);

        socket.close();
    }
}

组播:一对多通讯

当前主机与选定的一组主机的通信。

Java UDP通信详解:单播、广播、组播
UDP如何实现组播
使用组播地址:224.0.0.0(不含) ~ 239.255.255.255(含)

具体操作
1.发送端的数据包的目的地是组播IP (例如:224.0.1.1, 端口:9999);
2.接收端必须绑定该组播IP(224.0.1.1),端口还要注册发送端的目的端口9999 ,这样即可接收该组播消息;
3.DatagramSocket的子类MulticastSocket可以在接收端绑定组播IP;

所在网段的其他主机注册了该组播IP和对应端口即可接收消息

发送端代码示例

public class client {
    public static void main(String[] args) throws Exception {
        System.out.println("=====发送端启动======");

        // 1、创建发送端对象:发送端自带默认的端口号
        DatagramSocket socket=new DatagramSocket();

        // 2、创建一个数据包对象封装数据
        
        byte[] buffer="123".getBytes();
        DatagramPacket packet=new DatagramPacket(buffer,buffer.length,InetAddress.getByName("224.0.1.1"),9999);

        // 3、发送数据出去
        socket.send(packet);

        socket.close();
    }
}

接收端代码示例文章来源地址https://www.toymoban.com/news/detail-431188.html

public class serve {
    public static void main(String[] args) throws Exception {
        System.out.println("=====接收端启动======");

        // 1.创建一个接受端对象,注册端口
        MulticastSocket socket=new MulticastSocket(9999);

        //把当前接收端加入到一个组播中,绑定对应的组播消息IP
//        socket.joinGroup(InetAddress.getByName("224.0.1.1"));
        //新绑定方法
        socket.joinGroup(new InetSocketAddress(InetAddress.getByName("224.0.1.1"),9999), NetworkInterface.getByInetAddress(InetAddress.getLocalHost()));

        // 2.创建一个数据包对象,封装接受的数据
        byte[] buffer=new byte[1024*64];
        DatagramPacket packet=new DatagramPacket(buffer,buffer.length);

        //3.等待接收消息
        socket.receive(packet);

        //4.打印接收的内容
        int len=packet.getLength();
        String rs=new String(buffer,0,len);
        System.out.println("收到了IP为:"+packet.getAddress()+"\n端口为:"+packet.getPort()+" 的消息");
        System.out.println("消息内容:"+rs);

        socket.close();
    }
}
}

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

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

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

相关文章

  • Qt实现UDP单播和组播功能

    UDP是不可靠、无连接的,所以划分为发送方和接收方更好理解  UDP是无连接的,进行单播通信时,只需要绑定接收方端口就行,发送方直接通过接收方的ip和绑定的端口进行通信。发送方可以绑定端口也可以不用绑定端口,不绑定端口的话,系统会随机分配端口。 对于多网卡

    2024年04月12日
    浏览(21)
  • Java中网络的基本介绍。网络通信,网络,ip地址,域名,端口,网络通信协议,TCP/IP传输过程,网络通信协议模型,TCP协议,UDP协议

    - 网络通信 概念:网络通信是指 通过计算机网络进行信息传输的过程 ,包括数据传输、语音通话、视频会议等。在网络通信中,数据被分成一系列的数据包,并通过网络传输到目的地。在数据传输过程中,需要确保数据的完整性、准确性和安全性。常见的网络通信协议有T

    2024年02月10日
    浏览(53)
  • 网络通信(19)-UDP协议详解

    目录 一、概述 二、内容 三、功能 四、报文格式 五、主要特点

    2024年01月25日
    浏览(34)
  • UDP的一对多通信(广播)-----个人笔记

    补充: 1、 TCP通信采用一对一的通信模式。日常生活中的网络会议通知、广告、网络信息公告等功能,需要采用UDP实现一对多的群发功能。         通过Internet实现群发功能的形式有两种: (1)利用 广播 向子网中的所有客户发送消息,比如各类通知、单位公告、集体活动日

    2024年02月05日
    浏览(25)
  • Java网络编程之IP,端口号,通信协议(UDP,TCP)

    ① C/S :客户端/服务器 在用户本地需要下载安装客户端程序,在远程有一个服务器端程序。 优点:画面精美,用户体验好 缺点:用户需要下载更新 ② B/S :浏览器/服务器 只需要一个浏览器,用户通过指定网址访问对应的服务器。 优点:不需要开发客户端,只需要页面+服务

    2024年02月03日
    浏览(49)
  • 【Java 基础篇】Java UDP通信详解

    UDP(User Datagram Protocol)是一种无连接的网络传输协议,它不像TCP那样需要建立连接和维护状态,因此更加轻量级。UDP适用于那些对数据传输的实时性要求较高,可以容忍一定数据丢失的场景。本文将详细介绍Java中如何使用UDP协议进行网络通信,包括UDP套接字、数据传输、服

    2024年02月04日
    浏览(23)
  • Java实现socket通信详解(UDP/TCP)c/s模式

    在实现具体代码前,我们先来简单了解下TCP/UDP协议 TCP在OSI模型中位于传输层在网络层之上,故在端到端传输的基础上将数据以端口号等标识实现进程/终端设备应用的区分, 将数据精准的传达。 TCP全称为传输控制协议具有以下特点: 面向有连接的服务可靠的数据传输,即在

    2023年04月08日
    浏览(23)
  • infinispan~组播和广播

    Infinispan 是一个基于分布式系统的内存数据存储和缓存平台,它的集群实现原理涉及到节点的发现和通信。在 Infinispan 中,集群是由多个节点组成的,每个节点都存储着数据的一部分,并且通过通信来保持数据的一致性和可用性。 Infinispan 集群的实现原理主要包括以下几个关

    2024年02月12日
    浏览(25)
  • 广播、组播 socket编程

             目录 1、单播 / 广播 / 组播 的概念 (1) 单播 (2) 广播 (3) 多播(组播) 2、广播 socket编程(只能是UDP通信) 3、多播 socket编程(只能是UDP通信) (1) 单播 之前在进行UDP和TCP编程的时候,客户端把数据发送到指定IP地址,此时接收方只有一个,这种数据包发送方式称为

    2024年02月01日
    浏览(28)
  • 广播、组播

    向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的IP地址,这个IP中子网内主机标志部分的二进制全部为1。 a.只能在局域网中使用。 b.客户端需要绑定服务器广播使用的端口,才可以接收到广播消息。 单

    2024年02月11日
    浏览(25)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包