Java如何确定进入UDP服务器的数据类型? XML Binary
问题描述:
我有一个UDP服务器监听。客户端可以发送二进制数据或XML数据(二进制表示为xml,以便快速进行攻击)。确定数据类型的适当方式是什么?Java如何确定进入UDP服务器的数据类型? XML Binary
答
您需要一块的元数据(标志,头)的两个之间进行区分。一点就够了。较高级别的协议使用更详细的标题来区分不同的类型,例如,在HTTP:
Content-Type: application/xml
当然,在你的情况,因为UDP封装体积小重量轻,只是假设第一个字节是类型鉴别。 0
- XML,1
- 二进制。
不要试图通过检查来猜测内容类型。 XML文档和二进制文档与统计学角度有很大不同,但它很麻烦并且容易出错。另外,我不建议尝试将传入的数据解析为XML,并将其视为二进制(如果失败)。
答
下载JDOM并将其添加到客户端的类路径中。在传入数据实例化SAXBuilder
并尝试从它构建一个XML文档。如果失败,它就是你的二进制数据。
...
SAXBuilder builder = new SAXBuilder();
try {
builder.build(/*data*/);
// You have XML data
} catch (Exception e) {
// You have binary data
}
因此,一般来说,除非有某种确认方案,否则无法知道您的客户向您发送什么类型的数据? – stackoverflow
@ Mrshll187:您的客户端正在向您发送一堆字节。这取决于你如何解释它。这就是文件具有扩展名(或魔术值)的原因。请注意,这并不是一个确认 - 您只需在传输开始时附加一段元数据即可。 –