我的任务是处理遗留D6应用程序,该应用程序使用TClientSocket从TCP / IP服务器请求数据,该服务器返回XML,我需要与新的第三方服务器集成,并且我遇到间歇性问题服务器响应中发送的完整数据。发生这种情况时,我会在多个OnRead事件上获取XML字符串,尽管XML非常小,约为1.76 KB。
响应的结构是返回的前四个字节表示:
字节位置,类型/用途:
0 - 0x02 (STX)
1 - Length, LSB
2 - Length
3 - Length, MSB
Bytes 4+ are the xml payload
然而,我之前的程序员只使用Socket.ReceiveText,因为现有逻辑收到的所有响应都非常小,大多数情况下都不到200字节......基本上是成功确认或错误数据。
有人会介意让我知道如何能够成功地消费响应,同时考虑到我已经把它变成了大块吗?即使我经常使用Delphi而且我无法改变我更熟悉的东西,我也没有使用过TClientSocket / TServerSocket。
提前致谢。
答案 0 :(得分:2)
在OnRead
事件中,读取套接字上当前可用的任何字节并将它们附加到缓冲区。然后,您可以循环遍历该缓冲区,仅提取完整的 XML消息并根据需要对其进行处理,将不完整的 XML消息留在缓冲区中,以便以后{{1}完成它们。 } events。
例如:
OnRead