-1

我正在进行一个与第三方应用程序集成的项目。该第三方使用本地(环回地址)TCP 侦听器来处理请求,并使用 XML 数据进行响应。在 XML 之前没有发送大小标头:传输只是用 \r\n 转义序列关闭。以下是我想出来处理这个问题:

byte[] buffer = new buffer[DefaultBufferSize];

do
{
    bytesRead = networkStream.Read(buffer, 0, buffer.Length);
    string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);

    if (response.EndsWith("\r\n"))
    {
        isReading = false;
    }
} while (isReading);

现在,这里的主要问题是,虽然大部分 XML 数据都被转义了,但换行符却没有。所以,我可能会读取一段数据,最后两个字符可能会与终止序列匹配。

有什么办法可以解决这个问题,还是我需要向第三方提出错误请求?

4

1 回答 1

2

您很幸运拥有一个 XML 文档。XML 文档有一个根节点,当您找到根节点的末尾时,您的文档就完成了。您可以通过尝试使用 解析您的响应来检查您的文档是否格式正确XDocument.Parse。如果您没有收到任何异常,则您的回复包含格式良好的文档,因此会被完全接收。

重复调用 XDocument.Parse 效率不是很高,但如果它对您的目的来说足够好,您就有一个简单的实现。

于 2012-11-12T17:16:58.387 回答