在 Java 中将 DatagramPacket 转换为字节数组后解析它

2024-01-07

我正在尝试解析我将在套接字上收到的 DatagramPacket。我知道我将收到的数据包的格式,即 DHCPREQUEST 数据包,但我认为这并不重要。为了简单起见,我们只考虑前六个字段:

第一个字段是“操作码”,为 1 个字节。
第二个字段是“硬件类型”,为 1 字节。
三、“硬件地址长度”,1字节。
第四,“跳数”,1字节。
五、“交易标识符xid”,4字节。
第六,“秒”,2字节。

收到数据包后,我的方法是将其转换为字节数组。

DatagramPacket request = new DatagramPacket(new byte[1024], 1024);
socket.receive(request);
byte[] buf = request.getData();

此时,数据包已存储在字节数组中buf作为一系列字节。既然我知道这个字节序列的结构是什么,那么我该如何解析它呢?一字节字段很简单,但是多位字段呢?例如,如何提取字节 4 到 7,并将它们存储在名为xid?

我可以手动将每个字节放入数组中:

byte[] xid = new byte[4];
xid[0] = buf[4];
xid[1] = buf[5];
xid[2] = buf[6];
xid[3] = buf[7];

但这对于长度为数百字节的字段来说非常乏味且不切实际。 String 类可以解析给定偏移量和长度的子字符串; Java中字节数组有类似的方法吗?

或者我是否以某种方式让自己的事情变得困难?


将字节数组包装在 ByteArrayOutputStream 中;围绕它包装一个 DataInputStream ;然后使用DataInputStream的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Java 中将 DatagramPacket 转换为字节数组后解析它 的相关文章

  • 类型已知,但方法指的是缺失类型

    我对 java 和 Eclipse 不太有经验 但遇到以下问题 我正在写类似的东西 Point3D myPoint myClass myMethod arg 我收到错误 方法 myMethod myType arg 引用缺失的类型 Poin
  • 如何在 Android 中的 Chrome 或 Firefox 等特定浏览器的 Web 视图中加载应用程序

    我是 Android 新手 我正在做一个应用程序 我需要在平板电脑上的 Web 视图中加载现有的应用程序 在平板电脑中 当我使用 Web 视图加载应用程序时 我的应用程序将加载到默认浏览器中 如何在平板电脑上的 Web 视图中的特定浏览器
  • Selenium 和 TestNG 同时使用“dependsOn”和“priority =”问题

    我正在努力在 GUI 自动化测试中实现更好的工作流程控制 我首先从dependsOn开始 但很快发现缺点是如果一个测试失败 则套件的整个其余部分都不会运行 所以我改用 priority 但看到了意外的行为 一个例子 Test priorit
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • 如何自动转换十六进制代码以将其用作 Java 中的 byte[]?

    我这里有很多十六进制代码 我想将它们放入 Java 中 而不需要向每个实体附加 0x 喜欢 0102FFAB 和我必须执行以下操作 byte test 0x01 0x02 0xFF 0xAB 我有很多很长的十六进制代码 有什么办法可以自动做
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 如何在Netbeans中设置JList的ListModel?

    我在 Netbeans IDE 的帮助下设计了一个 Swing GUI 该 GUI 包含一个 JList 默认情况下 它使用 QAbstractListModel 将其作为 JList 构造函数中的参数传递以创建该 JList 我想在 Ne
  • 是否可以手动检查 LocateRegistry 是否存在?

    I 已经发现 https stackoverflow com a 8338852 897090一种安全的方式获得LocateRegistry 即使注册表尚不存在 Registry registry null try registry Loc
  • jDBI中如何进行内查询?

    我怎样才能在 jDBI 中执行这样的事情 SqlQuery select id from foo where name in
  • Hibernate 标准接受 %% 值

    我正在使用下面的 Hibernate 代码来过滤workFlowName crt add Restrictions like workFlowName workFlow MatchMode ANYWHERE crt is the crite
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • 解析 XML 标签不匹配时出错

  • 为什么 java.util.Arraylist#clear 按照 OpenJDK 中的方式实现?

    http grepcode com file repository grepcode com java root jdk openjdk 6 b14 java util ArrayList java 473 http grepcode co
  • 检查按钮是否可用?如果没有,请等待 5 秒钟,然后再次检查?

    基本上我想看看此刻是否可以单击按钮 如果没有我想再试一次 所以我需要某种 goto 函数来返回到代码的前一行 尽管我怀疑我写得非常糟糕 但它本来可以做得更容易 try driver findElement By xpath button i
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • 使用 Notepad++、Regex 重构 CSV 数据

    我有一个 CSV 文件 其中包含以下标题和 示例 数据 StopName RouteName Travel Direction Latitude Longitude StreetA StreetB 1 NameA DirectionA La
  • Tensorflow Precision、Recall、F1 - 多标签分类

    我正在尝试使用张量流实现多标签句子分类模型 大约有 1500 个标签 该模型运行得很好 但我不确定它生成的指标 这是生成指标的代码段 with tf name scope loss losses tf nn softmax cross en
  • 带有第三方库的 Typescript 3 项目参考(来自 npm)

    我正在使用 Typescript 并尝试与服务工作者建立后台同步 有人建议我应该这样做this https stackoverflow com a 52377959 6683308 您可以使用单独的 tsconfig json 文件将项目拆
  • Eclipse 未运行 JavaFX 应用程序 - 运行“java”应用程序

    每当我在 Eclipse 中创建项目并包含 javafx 时 当我单击运行按钮时 应用程序不会加载 e g package test import javafx application Application import javafx e
  • 如何获取网站的 Bing 搜索 Api 和 AppID [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已经创建了我想要使用的网站必应搜索 API 为此它需要AppID但我没有得到AppID 我尝试通过创建在 天蓝色市场 上创建一个AppId窗口实时I
  • 如何在 spring 4.* 中通过注解创建多个字段的约束验证器

    以 spring 4 为例 如何通过注解为更多字段创建验证器限制 UniqueValidator Entity Table name persons UniqueValidator message Peson already exist c
  • 根据语言更改字体大小

    所以我读了一些关于 css 语言标签的建议 但似乎一切都需要提前将语言放入标签中 我无法更改韩语语言的 html 标签 它与英语具有相同的 h1 标签 这是因为它是同一网站的翻译版本 我希望韩语版本的字体和字体大小与英语版本不同 我可以仅通
  • Javafx ListView 使用图像而不是字符串

    我正在尝试在我的程序中制作带有电影图片的横幅 但我无法将带有图像网址的列表转换为实际图像 我该如何做到这一点 这是我当前的代码 public void initData boolean onlineProvider String urite
  • 用于将执行 xml 计划可视化为 HTML 的工具

    是否有任何工具 XSLT 样式表可将 Microsoft Visual Studio 返回的 XML 执行计划转换为 HTML 如果做不到这一点 有谁知道有什么技术可以用来显示适合显示执行计划的 HTML 图表 我找不到所以我自己做了一个
  • “URL 安全的 CSRF 令牌现在是默认的”警告

    我最近从 Rails 6 升级到 7 尽管我已经urlsafe csrf tokens设置为真 config initializers new framework defaults 6 1 rb Rails application conf
  • 如何使用 AsyncTask 类更新将文件复制到另一个目录的进度?

    我应该如何使用 AsyncTask 类和进度条来执行将文件复制到手机 SD 卡本地上下文中的另一个目录的过程 我在 这里 1 看到了一个类似的例子 但我不知道如何合并差异 修改代码的上下文以适应我的上下文以使其工作 会是这样的 Params
  • 国际化 HelloWorld 程序 .NET

    我有一个小型测试应用程序 它有 2 个资源文件 Resources resx Resources de DE resx 具有完全相同的字符串名称 但将字符串转换为德语 对于我的表单 我将 Localize 属性设置为 true 在我的应用程
  • Postgresql 转储权限被拒绝

    我在尝试转储数据库时收到此错误 我输入 linuxuser sudo su postgres linuxuser sudo password for linuxuser pg dump h localhost mydb gt tempfil
  • 枚举不应该在 API 中使用吗?

    我正在使用提供给我的已编译的 C 库 我对编译库时使用的编译器 版本 选项等的信息有限 库接口使用enum既可以在传递的结构中 也可以直接作为传递的参数 问题是 如何确保或确定当我编译代码以使用提供的库时 我的编译器将为这些库使用相同的大小
  • 如何将 Gradle 中的原生 JUnit 5 支持与 Kotlin DSL 结合使用?

    我想将内置 JUnit 5 与 Gradle Kotlin DSL 一起使用 因为在构建过程中我收到此警告 WARNING The junit platform gradle plugin is deprecated and will be
  • 所有构建的 gcloud 步骤超时的全局限制在哪里设置?

    在哪里可以找到 gcloud 构建步骤超时的全局限制 这是我的 gcloud 构建配置 steps name gcr io cloud builders yarn name gcr io cloud builders yarn args b
  • 在 yaml.dump Python 中强制引用

    在我进入之前 是的 我已经研究过它并且知道 YAML 不区分引号和非引号 而只是按原样获取类型 坦率地说 我认为没有引号更好 但不幸的是这不是我需要的 所以请尝试理解我have研究了这个问题 但仍然需要我的字符串对象周围的引号 在我的代码中
  • readAsDataURL 不处理 captureAudio 中的文件

    我的 FileReader 对象可以完美上传图像 我正在追踪onload以及其他事件 这些都在我上传图像时发生 fileReader new FileReader fileReader onloadstart e gt window ale
  • 在根模块中使用 aws_vpc 数据源的 Terraform 鸡/蛋问题

    我有一个根 Terraform 模块 它声明了 VPC 模块和其他模块 例如要在 VPC 中启动的 EC2 实例 在 EC2 模块中 我使用以下命令读取 VPCaws vpc type data aws vpc vpc filter nam
  • 在 Java 中将 DatagramPacket 转换为字节数组后解析它

    我正在尝试解析我将在套接字上收到的 DatagramPacket 我知道我将收到的数据包的格式 即 DHCPREQUEST 数据包 但我认为这并不重要 为了简单起见 我们只考虑前六个字段 第一个字段是 操作码 为 1 个字节 第二个字段是