![](/img/trans.png)
[英]NetworkStream.Write returns immediately - how can I tell when it has finished sending data?
[英]Establish if a NetworkStream has finished reading
我正在通过一个项目与第三方应用程序集成。 该第三方使用本地(回送地址)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数据都已转义,但换行符却没有。 因此,我可能会读取一段数据,而最后两个字符纯粹是偶然匹配终止序列。
有什么办法可以解决此问题,还是我需要向第三方提出错误请求?
您很幸运有一个XML文档。 XML文档具有一个根节点,当您找到根节点的末尾时,您的文档就完成了。 您可以通过尝试使用XDocument.Parse
解析响应来检查文档是否格式正确。 如果您没有任何例外,您的回复包含格式正确的文档,因此可以完全收到。
重复调用XDocument.Parse并不是很有效,但是如果对您的目的足够好,那么您可以执行一个简单的实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.