0

我有一个 UDP 服务器正在监听。客户端可以发送二进制数据或 XML 数据(二进制表示为 xml,以便快速攻击)。确定传入数据类型的适当方法是什么?

在此处输入图像描述

4

2 回答 2

1

下载 JDOM 并将其添加到客户端的类路径中。在传入数据上实例化 aSAXBuilder并尝试从中构建 XML 文档。如果失败,则它是您拥有的二进制数据。

...
SAXBuilder builder = new SAXBuilder();
try {
   builder.build(/*data*/);
   // You have XML data
} catch (Exception e) {
   // You have binary data
}
于 2013-01-10T19:40:52.117 回答
1

您需要一段元数据(标志标头)来区分两者。一点就够了。更高级别的协议使用更详细的标头来区分不同的类型,例如在 HTTP 中:

Content-Type: application/xml

当然,在您的情况下,因为 UDP 包又小又轻,所以假设第一个字节是类型鉴别器。0- XML,1- 二进制。

不要试图通过检查来猜测内容类型。从统计的角度来看,XML 文档和二进制文档有很大的不同,只是比较麻烦而且容易出错。此外,我不建议尝试将传入数据解析为 XML,如果失败则将其视为二进制文件。

于 2013-01-10T19:38:21.803 回答