首页 > 编程语言 >网络编程 p5 UDP编程

网络编程 p5 UDP编程

时间:2023-07-20 15:47:43浏览次数:35  
标签:DatagramSocket UDP DatagramPacket p5 编程 length import new

UDP网络通信编程

  • 基本介绍

    1. 类DatagramSocket和DatagramPacket实现了基于UDP协议网络程序。
    2. UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
    3. DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。
    4. UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接送方的连接。
  • 基本流程

    1. 核心的两个类/对象 DatagramSocket/DatagramPacket
    2. 建立发送端,接收端
    3. 建立数据包
    4. 调用DatagramSocket的发送和接收方法
    5. 关闭DatagramSocket

  • UDP网络编程原理示意图

  • 注意事项

    1. 没有明确的服务端和客户端,演变成数据的发送端和接收端;
    2. 接收数据和发送数据是通过DatagramSocket对象完成的;
    3. 将数据封装到DatagramPacket对象/装包;
    4. 当接收到DatagramPacket对象,需要进行拆包,取出数据;
    5. DatagramSocket可以指定在哪个端口接收数据;
  • 代码演示

    package com.hspedu.udp;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
    /**
     * @author: 86199
     * @date: 2023/5/17 17:49
     * @description: UDP
     */
    public class UDPReceiverA {
        public static void main(String[] args) throws IOException {
            //1. 创建一个DatagramSocket 对象,准备在9999接收数据
            DatagramSocket socket = new DatagramSocket(9999);
    
            //2. 构建一个DatagramPacket对象,用来接收数据
            //    UDP,一个数据包最大64K
            byte[] bytes = new byte[1024];
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
    
            //3. 调用接受方法,将通过网络传输的 DatagramPacket 对象填充到packet对象
            //   注意:当有数据发送到 本机的9999端口时,就会接收到数据
            //        如果没有数据包发送到 本机的9999端口,就会阻塞等待
            System.out.println("接收端A 等待接收数据……");
            socket.receive(packet);
    
            int length = packet.getLength();
            byte[] data = packet.getData();
    
            String s = new String(data, 0, length);
            System.out.println(s);
    
            //a端作发送端
            byte[] data2 = "好的,明天见".getBytes();
            DatagramPacket packet1 =
                    new DatagramPacket(data2, data2.length, InetAddress.getByName("10.15.205.153"), 9998);
    
            socket.send(packet1);
    
            //关闭资源
            socket.close();
            System.out.println("A端退出...");
        }
    }
    
    
    package com.hspedu.udp;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
    /**
     * @author: 86199
     * @date: 2023/5/17 17:50
     * @description: UDP
     */
    public class UDPSenderB {
        public static void main(String[] args) throws IOException {
            //1. 创建 DatagramSocket 对象,准备在9998端口 发送数据
            DatagramSocket socket = new DatagramSocket(9998);
    
            //2. 将需要发送的数据,封装到 DatagramPacket对象
            byte[] data = "hello,明天去吃火锅吧".getBytes();
    
            //说明:封装 DatagramPacket对象 data 内容字节数组,data.length,主机(IP),端口
            DatagramPacket packet =
                    new DatagramPacket(data, data.length, InetAddress.getByName("10.15.205.153"), 9999);
    
            socket.send(packet);
    
            //B端作接收端
            byte[] bytes = new byte[1024];
            DatagramPacket packet1 = new DatagramPacket(bytes, bytes.length);
    
            System.out.println("接收端B 等待接收数据……");
            socket.receive(packet1);
    
            int length = packet1.getLength();
            byte[] data1 = packet1.getData();
    
            String s = new String(data1, 0, length);
            System.out.println(s);
    
    
            //关闭资源
            socket.close();
            System.out.println("B端退出...");
        }
    }
    
    

标签:DatagramSocket,UDP,DatagramPacket,p5,编程,length,import,new
From: https://www.cnblogs.com/zh-Note/p/17557507.html

相关文章

  • 【雕爷学编程】Arduino动手做(48)---GY-291 ADXL345 三轴模块6
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • 【雕爷学编程】Arduino动手做(48)---GY-291 ADXL345 三轴模块5
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • c语言卷积的编程
    1、用c语言做这个离散卷积2、ccs5编写c语言卷积算法一般多少个周期?3、快速卷积在什么情况下效率最高呢4、C语言怎么实现小波变换5、C语言用子函数实现卷积6、怎样用c语言编写卷积计算程序用c语言做这个离散卷积暴力N^2可以直接乘,直接双重循环即可,要快的话可以用NlogN......
  • 【雕爷学编程】Arduino动手做(48)---GY-291 ADXL345 三轴模块4
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • 2023 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)记录
    RC-u1亚运奖牌榜思路略代码点击查看代码#include<bits/stdc++.h>#definerep(i,x,y)for(inti=x;i<=y;++i)usingnamespacestd;#defineintlonglonginta[30][30];signedmain(){ intn; cin>>n; while(n--){ intx,c; cin>>x>>c; a[x]......
  • 【雕爷学编程】Arduino动手做(48)---GY-291 ADXL345 三轴模块3
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • TCP和UDP协议的区别
    1、TCP是面向连接的,而UDP是无连接的协议。2、TCP对于传输有用的数据非常可靠,因为它需要确认发送的信息,并且能重新发送丢失的数据包;UDP是一种不可靠的协议,数据包丢失,它不会请求重新传输,目标计算机会收到损坏的数据3、TCP速度较慢,但更健壮,因为TCP在传输数据之前建立连接,并确保数据......
  • 【雕爷学编程】Arduino动手做(48)---GY-291 ADXL345 三轴模块2
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......
  • python udp settimeout
    PythonUDPsettimeout实现步骤为了帮助你理解和实现Python的UDPsettimeout功能,我将提供以下步骤。首先,我们将了解UDP和settimeout的概念,然后讨论如何在Python中使用它们。UDP简介UDP(UserDatagramProtocol)是一种无连接的传输协议,它在网络中负责将数据包从一个主机发送到另一......
  • 【雕爷学编程】Arduino动手做(40)---KY-040旋转编码器模块2
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题......