Autojs 实践-抖音极速版福袋助手

前言

好久没更新博客了,最近做了个抖音极速版福袋脚本,想看看能不能自动抢到,于是在仿照其他脚本UI做了一个,哈哈。利用上班时间让它自己跑,测试大概2-3天,一个福袋没抢到(也不知道是不是被检测到了),唉,确实蛮心累了,可能也需要一些经验吧,后面会持续优化吧!!创作不易,希望可以给个赞谢谢!!

概述

抖音极速版脚本分:体验版普通版云控版
毕竟创作不易,我会给出体验版本源码,放心。

实现逻辑

在这里插入图片描述

脚本UI实现效果

云空版本还在开发中!!!
在这里插入图片描述

测试工具

手机小米11
开发工具AutoXJS
极速版版本28.1.0

主要方法

1、判断目前在APP页面位置

function F611484() {
    sleep(5000, 6000);
    let OO00OO000OO00OO00 = "android.widget.FrameLayout";
    let OO0O0OO0O0OO0O0OO = "android.widget.TextView"
    if (OOO00OOO000OOO00OO = classNameContains("Button").textContains("我知道了").findOne(2000)) {
        OOO00OOO000OOO00OO.click();
    }
    if (className(OO00OO000OO00OO00).findOnce()) {
        // 在首页
        if (className(OO0O0OO0O0OO0O0OO).text("首页").findOne(1000)) {
            toastLog("在首页")
            click("首页")
            sleep(3000, 6000);
            if (G898459.R124174) {
                H169894()
            } else if (G898459.U829206) {
                B046710()
            }
        } else {
            try {
                sleep(4000, 6000);
                let OOO0O00OOO0OOO00O = className("android.widget.TextView").id("user_name").findOnce();
                if (OOO0O00OOO0OOO00O) {
                    let OOO0OOO0O0OOOOO0O = OOO0O00OOO0OOO00O.getText();
                    console.log("已在直播间:", OOO0OOO0O0OOOOO0O);
                    Y795214()
                } else {
                    let OOO0O00OOO0OOO00O = className("android.widget.TextView").id("user_name").findOnce();
                    if (OOO0O00OOO0OOO00O) {
                        let OOO0OOO0O0OOOOO0O = OOO0O00OOO0OOO00O.getText();
                        console.log("已在直播间:", OOO0OOO0O0OOOOO0O);
                        Y795214()
                    }
                }
            } catch (error) {
                console.log("数据异常:", error);
                Y795214()
            }
        }
    }
}

2、选择推荐直播间

function H169894() {
    if (OOO00OOO000OOO00OO = className("android.widget.Button").descContains("侧边栏").findOne(2000)) {
        OOO00OOO000OOO00OO.click();
        sleep(4000, 6000);
        if (O431321(className("android.widget.TextView").textContains("直播广场").findOnce())) {
            Y795214()
        } else {
            console.log("没找到");
        }
    }
}

3、选择关注直播间

function B046710() {
    click("关注")
    sleep(2000, 4000);
    if (O431321(classNameContains("Button").descMatches(/(.*直播中.*)/).findOnce())) {
        sleep(5000, 6000);
        // 限时任务
        if (beginBtn = classNameContains("FlattenUIText").textContains("限时任务").findOne(2000)) {
            back()
            sleep(2000, 4000);
            back()
        }
        Y795214()
    } else if (O431321(classNameContains("TextView").descMatches(/(.*高领.*)/).findOnce())) {
        sleep(5000, 6000);
        // 限时任务
        if (beginBtn = classNameContains("FlattenUIText").textContains("限时任务").findOne(2000)) {
            back()
            sleep(2000, 4000);
            back()
        }
        Y795214()
    } else {
        console.log("未找到直播间");
    }
}

完整代码实现

"ui";
importClass(android.view.View);
importClass(android.content.Intent);
importClass(android.net.Uri);
importClass(android.provider.Settings);
var V474794 = '淞沪'
var U177888 = '1.0.1'
var U275459 = '#4EBFDD'
var scriptTitle = V474794 + ' v' + U177888

var S287859 = {
    M858326: null,
    F645210: false,
    H645600: null,
    V597406: 0,
    D252837: random(2, 4),
    J193048: random(0.5, 0.55),
    G877429: random(0.1, 0.15),
    F130107: 60000
}

var G898459 = {
    R124174: false,
    U829206: false,
    D560422: 3,
}

var I429086 = {
    P995066: null,
    Z682637: null,
  }

var ooooOOOOOO000000OOOO0O0O0O0O = ScriptUI.toString()
var ooOOOOOOOOOOOOOoooooooooo00000oooOO = ooooOOOOOO000000OOOO0O0O0O0O.slice(ooooOOOOOO000000OOOO0O0O0O0O.indexOf('{'), ooooOOOOOO000000OOOO0O0O0O0O.lastIndexOf('}')).slice(1, -2).replace(/项目标题/g, scriptTitle).replace(/#4EBFDD/g, U275459)
configIDArr = ooOOOOOOOOOOOOOoooooooooo00000oooOO.match(/ id( )?=( )?["|'].*?["|']/g).map(item => item.replace(/ id( )?=( )?["|']|"|'/g, ''))
ui.statusBarColor(U275459);
ui.layout(ooOOOOOOOOOOOOOoooooooooo00000oooOO);

function ScriptUI() {
    <vertical>
        <appbar>
            <toolbar bg="#4EBFDD" layout_height="60" margin="-2" id="toolbar" title="项目标题" />
            <tabs id="tabs" />
        </appbar>
        <viewpager id="viewpager">
            <frame>
                <scroll>
                    <vertical gravity="center">
                        <card w="*" h="auto" margin="10 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                            <vertical padding="18 8" h="auto">
                                <linear>
                                    <Switch margin="12 0" layout_weight="1" id="autoService" text="无障碍服务" textSize="15sp" checked="false" />
                                    {/* <Switch margin="12 0" layout_weight="1" id="floatingWindowPermission" text="悬浮窗权限" textSize="15sp" checked="false" /> */}
                                </linear>
                            </vertical>
                            <View bg="#4EBFDD" h="*" w="5" />
                        </card>
                        <text id="login" text="wx: sout-lanys" layout_gravity="center" textColor="red" w="auto" textStyle="bold" />
                        <horizontal padding="18 8" h="auto">
                            <card w="auto" h="auto" margin="5 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                                <button id="stopScript" h="auto" style="Widget.AppCompat.Button.Colored" text="关 闭" textStyle="bold" color="#ffffff" bg="#4EBFDD" foreground="?selectableItemBackground" layout_gravity="bottom" />
                            </card>
                            <card w="*" h="auto" margin="5 5" cardCornerRadius="2dp" cardElevation="1dp" gravity="center_vertical">
                                <button id="startScript" h="auto" text="开 始 运 行" textStyle="bold" color="#ffffff" bg="#4EBFDD" foreground="?selectableItemBackground" layout_gravity="bottom" />
                            </card>
                        </horizontal>
                        <radiogroup>
                        </radiogroup>

                        <vertical padding="18 8" h="auto">
                            <vertical>
                                <text text="福袋入口:" padding="8 8 8 8" textSize="17" h="auto" />
                                <radiogroup orientation="horizontal" padding="5 5 5 5">
                                    <radio id="luckyBagRecommended" text="推荐入口" textSize="17" paddingRight="5" />
                                    <radio id="luckyBagFollow" text="关注入口" textSize="17" checked="true" paddingRight="5" />
                                </radiogroup>
                            </vertical>
                            <horizontal>
                                <text text="福袋时间:" padding="8 8 8 8" textSize="17" h="auto" />
                                <input id="luckyBagTime" color="#666666" paddingLeft="2" w="150" value="5" />
                                <text text="(单位分)" padding="8 8 8 8" textSize="17" h="*" />
                            </horizontal>
                        </vertical>
                    </vertical>
                </scroll>
            </frame>
        </viewpager>
    </vertical>
}
ui.viewpager.setTitles(["基础模块"]);
ui.tabs.setupWithViewPager(ui.viewpager);

ui.emitter.on("resume", function () {
    ui.autoService.checked = auto.service != null;
    // ui.floatingWindowPermission.checked = floaty.checkPermission() != false
});

ui.autoService.on("check", function (checked) {
    if (checked && auto.service == null) {
        app.startActivity({
            action: "android.settings.ACCESSIBILITY_SETTINGS"
        });
    }
    if (!checked && auto.service != null) {
        auto.service.disableSelf();
    }
});

ui.stopScript.on("click", () => {
    if (I429086.Z682637 == null) {
    } else {
        I429086.Z682637.interrupt();
        I429086.Z682637 = null;
    }
    exit()
});

ui.startScript.on("click", function () {
    uiStart()
})

function uiStart() {
    let OOOOOOOOO0O0OOOOO = ui.luckyBagRecommended.isChecked();
    if (OOOOOOOOO0O0OOOOO) {
        G898459.R124174 = OOOOOOOOO0O0OOOOO
    }
    let OOOOOOO0O0OOO0OOO = ui.luckyBagFollow.isChecked();
    if (OOOOOOO0O0OOO0OOO) {
        G898459.U829206 = OOOOOOO0O0OOO0OOO
    }
    let OO0O0OO0O0OO0O0OO = ui.luckyBagTime.getText();
    if (!P250312(OO0O0OO0O0OO0O0OO)) {
        G898459.D560422 = OO0O0OO0O0OO0O0OO
    }
    I429086.Z682637 = threads.start(function () {
        E746632()
    });
}

function E746632() {
    app.launchApp("抖音极速版");
    toastLog("当前启动:" + "抖音极速版");
    F611484()
}

function F611484() {
    sleep(5000, 6000);
    let OO00OO000OO00OO00 = "android.widget.FrameLayout";
    let OO0O0OO0O0OO0O0OO = "android.widget.TextView"
    if (OOO00OOO000OOO00OO = classNameContains("Button").textContains("我知道了").findOne(2000)) {
        OOO00OOO000OOO00OO.click();
    }
    if (className(OO00OO000OO00OO00).findOnce()) {
        // 在首页
        if (className(OO0O0OO0O0OO0O0OO).text("首页").findOne(1000)) {
            toastLog("在首页")
            click("首页")
            sleep(3000, 6000);
            if (G898459.R124174) {
                H169894()
            } else if (G898459.U829206) {
                B046710()
            }
        } else {
            try {
                sleep(4000, 6000);
                let OOO0O00OOO0OOO00O = className("android.widget.TextView").id("user_name").findOnce();
                if (OOO0O00OOO0OOO00O) {
                    let OOO0OOO0O0OOOOO0O = OOO0O00OOO0OOO00O.getText();
                    console.log("已在直播间:", OOO0OOO0O0OOOOO0O);
                    Y795214()
                } else {
                    let OOO0O00OOO0OOO00O = className("android.widget.TextView").id("user_name").findOnce();
                    if (OOO0O00OOO0OOO00O) {
                        let OOO0OOO0O0OOOOO0O = OOO0O00OOO0OOO00O.getText();
                        console.log("已在直播间:", OOO0OOO0O0OOOOO0O);
                        Y795214()
                    }
                }
            } catch (error) {
                console.log("数据异常:", error);
                Y795214()
            }
        }
    }
}

function H169894() {
    if (OOO00OOO000OOO00OO = className("android.widget.Button").descContains("侧边栏").findOne(2000)) {
        OOO00OOO000OOO00OO.click();
        sleep(4000, 6000);
        if (O431321(className("android.widget.TextView").textContains("直播广场").findOnce())) {
            Y795214()
        } else {
            console.log("没找到");
        }
    }
}

function B046710() {
    click("关注")
    sleep(2000, 4000);
    if (O431321(classNameContains("Button").descMatches(/(.*直播中.*)/).findOnce())) {
        sleep(5000, 6000);
        // 限时任务
        if (beginBtn = classNameContains("FlattenUIText").textContains("限时任务").findOne(2000)) {
            back()
            sleep(2000, 4000);
            back()
        }
        Y795214()
    } else if (O431321(classNameContains("TextView").descMatches(/(.*高领.*)/).findOnce())) {
        sleep(5000, 6000);
        // 限时任务
        if (beginBtn = classNameContains("FlattenUIText").textContains("限时任务").findOne(2000)) {
            back()
            sleep(2000, 4000);
            back()
        }
        Y795214()
    } else {
        console.log("未找到直播间");
    }
}


function Y795214() {
    while (true) {
        sleep(10000, 12000);
        const OOO00OOO000OOO00OO = className("android.widget.Button").descMatches(/(.*电商.*)/).findOne(1000);
        if (OOO00OOO000OOO00OO) {
            sleep(5000, 6000);
        }
        let OOOOO0OOOOO0OOOOO0O = A609971();
        if (OOOOO0OOOOO0OOOOO0O) {
            X839265(OOOOO0OOOOO0OOOOO0O)
        }
    }
}
function A609971() {
    const OOOOOOO0O0OOO0OOO = className("com.lynx.tasm.behavior.ui.LynxFlattenUI").descMatches(/(.*福袋.*)/).findOne(1000);
    if (OOOOOOO0O0OOO0OOO) {
        let OO00OO000OO00OO00 = OOOOOOO0O0OOO0OOO.desc();
        if (!P250312(OO00OO000OO00OO00) && !V559387(OO00OO000OO00OO00)) {
            back()
        } else {
            // 判断是否包含数字
            if (!P250312(OO00OO000OO00OO00) && V559387(OO00OO000OO00OO00)) {
                var OO0O0OO0O0OO0O0OO = OO00OO000OO00OO00.split(" ")
                var OOOOO0OOOOO0OOOOO0O = OO0O0OO0O0OO0O0OO[1].split("分")
                var OOOOO0OO0O0OOO0OOO0 = OOOOO0OOOOO0OOOOO0O[1].split("秒")
                let OOOOOO00OOO0OOOOO0O = D935738((parseInt(OOOOO0OOOOO0OOOOO0O[0] * 60000)), parseInt(OOOOO0OO0O0OOO0OOO0[0] * 1000));
                if (OOOOOO00OOO0OOOOO0O) {
                    console.log("等待时间秒:", OOOOOO00OOO0OOOOO0O, "秒");
                    console.log("规定等待时间秒:", G898459.D560422 * S287859.F130107, "秒");
                    if (OOOOOO00OOO0OOOOO0O <= G898459.D560422 * S287859.F130107) {
                        return OOOOOO00OOO0OOOOO0O + 1000;
                    } else {
                        console.log("不符合福袋要求");
                        Z618586()
                    }
                }
            } else {
                back()
            }
        }
    } else {
        console.log("没有福袋");
        Z618586()
    }

}

function V559387(str) {
    return /[0-9]/.test(str);
}


function D935738(OO0O0OO0O0OO0O0OO, OO0O0OO0O0OO0O0OO0) {
    return OO0O0OO0O0OO0O0OO + OO0O0OO0O0OO0O0OO0;
}

function X839265(OO0O0OO0O0OO0O0OO) {
    if (OO0O0OO0O0OO0O0OO) {
        if (!classNameContains("FlattenUIImage").findOne(1000)) {
            if (text("参与成功 等待开奖").findOnce()) {
                back()
            } else {
                back()
            }
        } else {
            const OOO0O00OOO0OOO00O = className("com.lynx.tasm.behavior.ui.LynxFlattenUI").descMatches(/(.*福袋.*)/).findOne(1000);
            if (O431321(OOO0O00OOO0OOO00O)) {
                if (O431321(text("一键发表评论").findOnce())) {
                    console.log("参与普通福袋");
                    console.log("参与福袋,福袋时间为:", Math.round((OO00OO000OO00OO00 / S287859.F130107)), "分钟")
                    toast("参与福袋,福袋时间为:", Math.round((OO00OO000OO00OO00 / S287859.F130107)), "分钟")
                    sleep(OO00OO000OO00OO00);
                    O431321(text("我知道了").findOnce())
                    return true;
                }
            }
        }
    }
}

function Z618586() {
    console.log(device.width / S287859.D252837 + "," + device.height * S287859.J193048);
    console.log(device.width / S287859.D252837 + "," + device.height * S287859.G877429);
    swipe(device.width / S287859.D252837, device.height * S287859.J193048, device.width / S287859.D252837, device.height * S287859.G877429, random(200, 400))

}

function P250312(OO00OO000OO00OO00) {
    if (OO00OO000OO00OO00 !== null && OO00OO000OO00OO00 !== undefined && OO00OO000OO00OO00 !== '' && OO00OO000OO00OO00 != "") {
        return false;
    } else {
        return true;
    }
}

function O431321(OO0O0OO0O0OO0O0OO) {
    if (OO0O0OO0O0OO0O0OO) {
      click(OO0O0OO0O0OO0O0OO.bounds().centerX(), OO0O0OO0O0OO0O0OO.bounds().centerY())
      sleep(2000, 4000);
      return true;
    }
    return false;
  }

总结

后面会继续完善、比如日志框、浮窗、直播间参与人数过滤、抢普通福袋等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268374.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jQuery实现响应式瀑布流 - 实现灯箱效果

在这之前&#xff0c;有写过一篇关于实现瀑布流的文章&#xff0c;后期有人留言提出需要添加灯箱效果的功能&#xff0c;所以这次则讲述下如何实现此功能。由于该篇接上篇写的&#xff1a;jQuery实现响应式瀑布流效果&#xff08;jQueryflex&#xff09;_jquery瀑布流插件-CSDN…

python的import功能,你需要了解的导入机制

1 基本概念 概念 解释 import 即导入&#xff0c;方式就是在import位置将代码文件拷贝过去。 模块&#xff08;module&#xff09; python中一个.py文件定义为一个模块 常用的几种模块导入方式&#xff1a; import module_nameimport module_name.function_nameimport mod…

听GPT 讲Rust源代码--src/tools(25)

File: rust/src/tools/clippy/clippy_lints/src/methods/suspicious_command_arg_space.rs 在Rust源代码中&#xff0c;suspicious_command_arg_space.rs文件位于clippy_lints工具包的methods目录下&#xff0c;用于实现Clippy lint SUSPICIOUS_COMMAND_ARG_SPACE。 Clippy是Ru…

Web Components入门不完全指北

目前流行的各类前端框架&#xff0c;不管是react, angular还是vue&#xff0c;都有一个共同点&#xff0c;那就是支持组件化开发&#xff0c;但事实上随着浏览器的发展&#xff0c;现在浏览器也原生支持组件式开发&#xff0c;本文将通过介绍Web Components 的三个主要概念&…

分析冒泡排序

#include <stdio.h> int main() { int arr[10] { 2,5,1,3,6,4,7,8,9,0 }; int i 0; int j 0; for( i 0 ;i < sizeof(arr)/sizeof(arr[0]) - 1 ; i) 红色的代表数组一共有n个元素&#xff0c;则需要n-1次 { for( j 0 // 这里可以让数组从哪一…

设计模式--职责链模式

实验15&#xff1a;职责链模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解职责链模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用职责链模式解决实际问题。 [实验任务]&#xff1a;财务审批 某物资管理系统…

canvas入门笔记(上)

Canvas Canvas简介 Canvas API 提供了一个通过JavaScript 和 HTML的元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 Canvas API 主要聚焦于 2D 图形。而同样使用<canvas>元素的 WebGL API 则用于绘制硬件加速的 2D 和…

抠图、换背景、正装图证件照制作方法

本篇灵感是最近又要使用别的底色的正装照的图片。上学的时候&#xff0c;要求证件照的底色是蓝底、党员档案里要求图片的底色是红底、 将来上班的证件照要求是白底&#xff0c;并且无论是考研还是找工作都是制作简历的时候&#xff0c;根据简历的样板不同需要更换不同的底色。 …

Webpack基础使用

目录 一.什么是Webpack 二.为什么要使用Webpack 三.Webpack的使用 1.下载yarn包管理器 2.Webpack的安装 3.Webpack的简单使用 4.效果 四.Webpack打包流程 一.什么是Webpack Webpack是一个静态模块打包工具 二.为什么要使用Webpack 在开发中&#xff0c;我们常常会遇到…

[Linux] Mysql数据库中的用户管理与授权

一、登录用户的管理 1.1 查看用户密码的信息 用户信息存放在 mysql 数据库下的 user 表&#xff08;MySQL 服务下存在一个系统自带的 mysql 数据库&#xff09;。 use mysql ; show tables; desc user; 查看密码信息的命令&#xff1a; 能看到密码信息&#xff1a;是经过加…

【大数据】NiFi 的基本使用

NiFi 的基本使用 1.NiFi 的安装与使用1.1 NiFi 的安装1.2 各目录及主要文件 2.NiFi 的页面使用2.1 主页面介绍2.2 面板介绍 3.NiFi 的工作方式3.1 基本方式3.2 选择处理器3.3 组件状态3.4 组件的配置3.4.1 SETTINGS&#xff08;通用配置&#xff09;3.4.2 SCHEDULING&#xff0…

饥荒Mod 开发(二二):显示物品信息

饥荒Mod 开发(二一)&#xff1a;超大便携背包&#xff0c;超大物品栏&#xff0c;永久保鲜 饥荒中的物品没有详细信息&#xff0c;基本上只有一个名字&#xff0c;所以很多物品的功能都不知道&#xff0c;比如浆果吃了也不知道恢复什么&#xff0c; 采集的胡萝卜也不知道什么功…

Airbert: In-domain Pretraining for Vision-and-Language Navigation

题目&#xff1a;Airbert&#xff1a;视觉和语言导航的域内预训练 摘要 为了解决VLN数据集稀缺的问题&#xff0c;本文创建了一个数据集BNB。我们首先从在线租赁市场的数十万个列表中收集图像标题 (IC) 对。接下来&#xff0c;我们使用 IC 对提出自动策略来生成数百万个 VLN …

OpenCV与YOLO学习与研究指南

引言 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;而YOLO&#xff08;You Only Look Once&#xff09;是一个流行的实时对象检测系统。对于大学生和初学者而言&#xff0c;掌握这两项技术将大大提升他们在图像处理和机器视觉领域的能力。 基础知识储备 在深入…

Apache Commons IO: 简化文件和IO操作

第1章&#xff1a;引言 咱们在做Java编程的时候&#xff0c;经常会遇到各种文件操作和输入输出&#xff08;IO&#xff09;的问题。不论是读取一个配置文件&#xff0c;还是把数据写入日志&#xff0c;这些看似简单的任务有时候会让人头疼。传统的Java IO操作&#xff0c;虽然…

Odoo16 实用功能之Form视图详解(表单视图)

目录 1、什么是Form视图 2、Form视图的结构 3、源码示例 1、什么是Form视图 Form视图是用于查看和编辑数据库记录的界面。每个数据库模型在Odoo中都有一个Form视图&#xff0c;用于显示该模型的数据。Form视图提供了一个可编辑的界面&#xff0c;允许用户查看和修改数据库记…

设计模式--迭代器模式

实验18&#xff1a;迭代器模式 本次实验属于模仿型实验&#xff0c;通过本次实验学生将掌握以下内容&#xff1a; 1、理解迭代器模式的动机&#xff0c;掌握该模式的结构&#xff1b; 2、能够利用迭代器模式解决实际问题。 [实验任务]&#xff1a;JAVA和C常见数据结构迭代…

PyTorch随机数生成:torch.rand,torch.randn,torch.randind,torch.rand_like

在用PyTorch做深度学习开发过程中&#xff0c;时常用到随机数生成功能&#xff0c;但经常记不住几个随机数生成函数的用法&#xff0c;现在正好有点时间&#xff0c;整理一下。 1. torch.rand() torch.rand(*size, *, generatorNone, outNone, dtypeNone, layouttorch.stride…

我们是如何测试人工智能的(一)基础效果篇(内含大模型的测试内容)

来源&#xff5c;TesterHome社区 作者&#xff5c;孙高飞 前言 这个系列算是科普文吧&#xff0c;尤其这第一篇可能会比较长&#xff0c;因为我这8年里一直在 AI 领域里做测试&#xff0c;涉及到的场景有些多&#xff0c;我希望能尽量把我经历过的东西都介绍一下&#xff0c;…

<JavaEE> 协议格式 -- 传输层协议 UDP

目录 一、UDP协议格式长啥样&#xff1f; 二、端口号和IP地址 1&#xff09;UDP协议中包含哪两个端口号&#xff1f; 2&#xff09;有没有包含IP地址&#xff1f; 三、UDP报文长度 1&#xff09;UDP报文长度最长多长&#xff1f; 2&#xff09;UDP报文的组成&#xff1f…