Java如何确定进入UDP服务器的数据类型? XML Binary

问题描述:

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

enter image description here

您需要一块的元数据(标志)的两个之间进行区分。一点就够了。较高级别的协议使用更详细的标题来区分不同的类型,例如,在HTTP:

Content-Type: application/xml 

当然,在你的情况,因为UDP封装体积小重量轻,只是假设第一个字节是类型鉴别。 0 - XML,1 - 二进制。

不要试图通过检查来猜测内容类型。 XML文档和二进制文档与统计学角度有很大不同,但它很麻烦并且容易出错。另外,我不建议尝试将传入的数据解析为XML,并将其视为二进制(如果失败)。

+0

因此,一般来说,除非有某种确认方案,否则无法知道您的客户向您发送什么类型的数据? – *

+0

@ Mrshll187:您的客户端正在向您发送一堆字节。这取决于你如何解释它。这就是文件具有扩展名(或魔术值)的原因。请注意,这并不是一个确认 - 您只需在传输开始时附加一段元数据即可。 –

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

... 
SAXBuilder builder = new SAXBuilder(); 
try { 
    builder.build(/*data*/); 
    // You have XML data 
} catch (Exception e) { 
    // You have binary data 
}