【发布时间】:2014-07-30 17:50:44
【问题描述】:
我在从客户端读取流时遇到问题。我使用带有 Indy 10 的 Delphi XE3。 这个客户端,给我发送一个标记的文本数据流,它是 XML 格式的。当我使用 TIdTCPServer 读取数据时,我的问题就开始了。使用此代码:
if Acontext.Connection.IoHandler.InputbufferisEmpty then
begin
Acontext.Connection.IoHandler.CheckforDataonSource(1000);
Acontext.Connection.IoHandler.CheckForDisconnect;
if Acontext.Connection.IoHandler.InputbufferisEmpty then Exit;
end;
Acontext.Connection.Iohandler.ReadBytes(Abuffer,
Acontext.connection.ioHandler.Inputbuffer.size);
data := BytesToString(Abuffer, Tencoding.bigendianUnicode);
数据以 BigEndianUnicode 编码。我注意到,当我接收数据时,服务器读取并显示 2 个“块”不同的数据。如果服务器一直收到相同的数据,当我使用 BytesToString 解析时,数据每次都会在相同的字符处“剪切”。
这是我得到的结果:
<rootNode>
<Node1></Node1>
<Node2></Node2>
<
Node3></Node3>
<Node4></Node4>
当我将该 WideString 分配给 XMLDocument 时,问题变得更大。我在文档错误的顶层得到一个 Invalid。
有时,我运行服务器并正确获取所有数据,没有此错误,但是当我关闭应用程序并再次运行它时,服务器收到损坏的数据。
对不起,我的英语。我需要一些帮助。
【问题讨论】:
-
您可以发布客户端代码吗?看起来它没有被刷新。
-
它是一个第三方软件,只有软件和一些说明消息格式和编码的文档。仅此而已。
-
文档对消息格式有什么说法?这很重要,因为它会影响您编写阅读逻辑的方式。
-
消息可以定义用于其文本内容的编码,但协议定义了消息如何在 TCP 连接上构建。那么协议是如何定义的呢?消息数据是如何成帧的?你能提供实际的文件吗?还是捕获您尝试读取的原始 TCP 数据?
-
必须说明它们是如何传输的,否则没有人知道如何与这个客户端交互。
标签: delphi tcp byte xmldocument indy10