gpt4 book ai didi

.net - 如何在自定义 TCP 客户端/服务器之间正确传递 XML 字符串?

转载 作者:可可西里 更新时间:2023-11-01 02:44:45 24 4
gpt4 key购买 nike

我正在开发一个 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="..." />

在这种情况下,客户端可能会在一次读取中收到:

<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="..." />

或者

然后您可以使用 SAX流的解析器,它将在解析节点和属性时为您提供事件。

然后我会像这样实现你的两种类型的命令:

// individual commands
<get id="data_1"/>

// multiple commands
<multi>
<data id="DATA1"/>
<data id="DATA2"/>
...
</multi>

关于.net - 如何在自定义 TCP 客户端/服务器之间正确传递 XML 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1418506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com