繁体   English   中英

具有XML的TCP消息结构

[英]TCP Message Structure with XML

我通过TCP / IP发送消息,另一方面我解析TCP消息,例如这是已发送的消息之一。

$DKMSG(requestType=REQUEST_LOGIN&requestId=123&username=metdos&password=123)$EDKMSG

澄清:

$DKMSG(       //Start
)$EDKMSG      //End
requestType   //Parameter
REQUEST_LOGIN //Parameter Value

现在,我还想将Xml文件添加到我的消息中。 我正在考虑此选项:

$DKMSG(requestType=REQUEST_LOGIN&xmlData=
 <Item id="56D@MIT" type="SIGNAL">
 <Label>
 <Text>56D</Text>
 <X1>10</X1>
 <Y1>40</Y1>
 <RotateAngle>90</RotateAngle>
 </Label>
 <X1>0</X1>
 <Y1>20</Y1>
 <Width>35</Width>
 <Height>10</Height>
 <Source>sgs3lr</Source>
</Item>
)$EDKMSG

这种方式存在问题:

1)对我来说似乎不对。

2-)我必须更加小心地处理分号“ =”,否则我需要在参数中进行更改。

您有什么建议,谢谢。

这看起来像是本地格式。 您应该改用开箱即用的东西,例如JSON,XML,协议缓冲区,甚至是新兴的新兴企业:BERT,甚至指定使用该格式的RPC协议。 这些格式都有用多种语言为它们编写的解析器,并且C ++都支持它们。

您可以模仿HTTP ,它更简洁,易于理解并且易于解析:

LOGIN DKMSG/1.0
request-id: 123
username: metdos
password: eNcrYpTED
content-type: text/xml
content-length: 237

<Item id="56D@MIT" type="SIGNAL">
 <Label>
 <Text>56D</Text>
 <X1>10</X1>
 <Y1>40</Y1>
 <RotateAngle>90</RotateAngle>
 </Label>
 <X1>0</X1>
 <Y1>20</Y1>
 <Width>35</Width>
 <Height>10</Height>
 <Source>sgs3lr</Source>
</Item>

只是对问题2的一个实际答案:一种可能是将数据封装在$ XMLDATA(...)$ EXMLDATA中,因此您甚至都不依赖XML。

如Marcelo所述,关于制作新协议:检查现有协议:XMLRPC,SOAP

对于TCP协议,确实有两种思路。 正如Vijay所建议的那样,使用MIME标头。 另一个使用二进制长度前缀的字符串。 带有长度前缀的字符串比文本格式要有效得多,并且不需要编码特殊字符即可消除歧义。 缺点是您无法使用Telnet客户端与之对话的服务器。

这个建议怎么样?

  • 将“ xmlData”替换为“ content”
  • 添加另一个属性“ contentType”

然后,使用“ contentType”指定数据格式,然后将实际数据放入“ content”中。 至于数据格式(contentType),考虑到它给实际数据带来的开销,Base64可能是一个很好的选择,如果您的数据不太长的话。

仅使用XML是一棵树并且可以重新植根这一事实。 您希望与原始MXL一起发送的任何信息都可以作为附件添加到新的XML根目录中。

<DKMSG requestType="REQUEST_LOGIN">
     <Item id="56D@MIT" type="SIGNAL">
     <Label>
     <Text>56D</Text>
     <X1>10</X1>
     <Y1>40</Y1>
     <RotateAngle>90</RotateAngle>
     </Label>
     <X1>0</X1>
     <Y1>20</Y1>
     <Width>35</Width>
     <Height>10</Height>
     <Source>sgs3lr</Source>
    </Item>
</DKMSG>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM