IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【UDP网络通信编程】 -> 正文阅读

[网络协议]【UDP网络通信编程】

UDP网络通信编程

基本介绍

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

image-20220204160847410

说明:

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

基本流程

  1. 核心的两个类/对象 DatagramSocketDatagramPacket
  2. 建立发送端,接收端(没有服务端和客户端概念)
  3. 发送数据前,建立数据包/报 DatagramPacket对象
  4. 调用DatagramSocket的发送、接收方法
  5. 关闭DatagramSocket

image-20220204161512044

应用案例1

  1. 编写一个接收端A,和一个发送端B
  2. 接收端A在9999端口等待接收数据(receive)
  3. 发送端B向接收端A发送数据"hello,明天吃火锅~"
  4. 接收端A接收到发送端B发送的数据,回复“好的,明天见”,再退出
  5. 发送端接收 回复的数据,再退出

接收端A代码

public class UDPReceiverA {
    public static void main(String[] args)  throws IOException {
        //1. 创建一个 DatagramSocket对象,在9999端口监听
        DatagramSocket socket = new DatagramSocket(9999);

        //2. 构建一个 DatagramPacket对象,准备接受数据
        //   数据包最大为64KB
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        //3. 调用接收方法,将 通过网络传输的packet对象 填充到 我们的空的packet
        //   当有数据包发送到本机的9999端口,就会接收数据
        //   如果没有收到数据,就会堵塞
        System.out.println("---------------接收端A等待接收数据---------------");
        socket.receive(packet);

        //4. 可以对packet进行拆包,取出数据,并显示
        int length = packet.getLength();
        byte[] data = packet.getData();
        String s = new String(data, 0, length);
        System.out.println(s);

        //发送反馈
        byte[] bytes = "好的,明天见啦~".getBytes();
        DatagramPacket packet1 = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.109"), 9998);
        socket.send(packet1);

        //关闭socket
        socket.close();
        System.out.println("---------------接收端A退出---------------");
    }
}

image-20220204164532183

发送端B代码

public class UDPSenderB {
    public static void main(String[] args) throws IOException {
        //1. 创建一个 DatagramSocket对象,准备在9999端口接受数据
        //   因为发送端也可以接收数据,所以也需要一个端口
        DatagramSocket socket = new DatagramSocket(9998);

        //2. 构建一个 DatagramPacket对象,放入要发送的数据
        byte[] bytes = "Hello, 今晚吃火锅吗?".getBytes();
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("192.168.0.109"), 9999);

        //3. 发送数据包
        socket.send(packet);

        //4. 接受并拆解数据包
        System.out.println("---------------接受来自接受端A的消息---------------");
        byte[] buf = new byte[1024];
        DatagramPacket packet1 = new DatagramPacket(buf, buf.length);
        socket.receive(packet1);
        int length = packet1.getLength();
        byte[] data = packet1.getData();
        String s = new String(data, 0, length);
        System.out.println(s);

        //关闭socket
        socket.close();
        System.out.println("---------------发送端B退出---------------");

    }
}

image-20220204164539818

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-05 22:01:53  更:2022-02-05 22:02:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:47:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码