【问题标题】:How to format UDP packet in Java?如何在 Java 中格式化 UDP 数据包?
【发布时间】:2021-11-09 13:00:25
【问题描述】:

我需要使用 UDP 向 IP 地址发送一些数据。我不知道如何格式化我的字符串。我需要发送多个数据包吗?

从开发者页面我只得到以下信息:

我该怎么办?在右侧部分是我需要发送的字符串。

谁能解释一下“挑战”是什么意思?

来自开发者网站:

在游戏服务器初始化后不久,它会选择两个主服务器“加入”。为了让客户在单击“Internet”选项卡时看到特定的游戏服务器,该游戏服务器必须存在于 Steam 主服务器的记录中。 游戏服务器向每个主服务器发送“q”(71)。 每个主服务器通过发送 FF FF FF FF 73 0A 后跟(相对)唯一的 4 字节“挑战”号来响应。如果您向主服务器发送无效质询,您将收到另一个质询作为响应。

这是什么意思?

FF FF FF FF 73 0A

【问题讨论】:

  • 这些是十六进制数字。它们具有 0-9 和 A-F 的数字,因为它们基于 16……发送“FF FF FF FF 73 0A”意味着发送代表所述值的 6 个字节。你确定你已经为你正在进行的项目做好准备了吗?

标签: java udp format


【解决方案1】:

正如我在评论中所写,您需要发送字节,而不是真正的字符串。因此,您必须确定服务器是否使用 ascii 编码或其他方式,然后以正确的编码获取字符串的字节。

当文档谈到“发送 FF 73 ...”时,它意味着发送字节。它是一个以 16 为基数的数字 (="Hexadecimal")。例如,一个字节“FF”是这样创建的:

byte b = 0xFF; // Hex for 255

当文档谈到发送“q(71)”时,它意味着发送一个字节 (0x71),该字节将字母“q”编码为 ascii。

关于“挑战”请阅读Wikipedia 并更深入地咨询开发人员文档。我相信他们会在这件事上说得更多。

关于在 Java 中使用 UDP,您可以参考许多示例和 tutorials from oracle

【讨论】:

  • 这是发送数据的正确形式吗? byte[] buff = "q".getBytes();
  • 是的。但要注意编码。对于纯 ascii 内容,没关系。
猜你喜欢
  • 2011-06-12
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2010-09-08
  • 1970-01-01
相关资源
最近更新 更多