确定NetworkStream是否已完成读取

时间:2012-11-12 17:01:57

标签: c# networkstream

我正在通过一个与第三方应用程序集成的项目。此第三方使用本地(环回地址)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数据都是转义的,但换行却不是。所以,我可能会读取一段数据,最后两个字符是纯粹的机会匹配终止序列。

是否有解决此问题的方法,或者我是否需要向第三方提出错误请求?

1 个答案:

答案 0 :(得分:2)

您很幸运拥有XML文档。 XML文档有一个根节点,当您找到根节点的末尾时,您的文档就完整了。您可以尝试使用XDocument.Parse解析您的回复,以检查您的文档是否格式正确。如果您没有得到任何例外,您的回复包含一个格式良好的文档,因此完全收到。

重复调用XDocument.Parse并不是非常有效,但如果它足够好用于您的目的,那么您可以使用简单的实现。