我正在开发一个C++客户端/服务器项目,其中XML字符串通过TCP/IP连接传递.我的问题是关于指示已收到完整字符串的正确方法.我在考虑使用空终止字符串或首先发送XML字符串的长度,因此客户端/服务器可以判断何时收到完整的字符串.
客户端可以发送GET/SET命令,服务器可以回复,也可以发送连续的结果流.例如:客户端发送<GET ID="DATA1" />和服务器回复<ID="DATA1" VAL="..." />或服务器可以发送连续流:
<ID="DATA1" VAL="..." />
<ID="DATA2" VAL="..." />
<ID="DATA3" VAL="..." />
<ID="DATA4" VAL="..." />
Run Code Online (Sandbox Code Playgroud)
在这种情况下,客户端可能会收到一个Read:
<ID="DATA1" VAL="..." /><ID="DATA2" VAL="..." />
或者,如果发送了大量数据,则可能需要多次读取才能读取整个字符串.
使用空终止字符似乎有点简单(如果字符串是unicode会中断?)并且发送长度值似乎也很尴尬:
20<ID="DATA1" VAL="1" /> 要么 <length=20><ID="DATA1" VAL="1" />
这必须已经解决了HTML文件的TX/RX,我似乎无法搞清楚.
我正在为服务器使用MFC C++(遗留代码),为客户端使用.Net C++/CLI或C#.
任何帮助是极大的赞赏!
您的示例实际上并不是格式良好的XML,这可能是您问题的一部分.如果您遇到使用XML的麻烦,您也可以使用格式良好的XML,它具有节点终止的规则,即:
<data id="DATA1" val="..." />
Run Code Online (Sandbox Code Playgroud)
要么
然后,您可以为流使用SAX解析器,这将为您提供事件作为节点和属性进行解析.
然后我会实现你的两种类型的命令:
// individual commands
<get id="data_1"/>
// multiple commands
<multi>
<data id="DATA1"/>
<data id="DATA2"/>
...
</multi>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |