我正在通过一个与第三方应用程序集成的项目。此第三方使用本地(环回地址)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数据都是转义的,但换行却不是。所以,我可能会读取一段数据,最后两个字符是纯粹的机会匹配终止序列。
是否有解决此问题的方法,或者我是否需要向第三方提出错误请求?
答案 0 :(得分:2)
您很幸运拥有XML文档。 XML文档有一个根节点,当您找到根节点的末尾时,您的文档就完整了。您可以尝试使用XDocument.Parse
解析您的回复,以检查您的文档是否格式正确。如果您没有得到任何例外,您的回复包含一个格式良好的文档,因此完全收到。
重复调用XDocument.Parse并不是非常有效,但如果它足够好用于您的目的,那么您可以使用简单的实现。