C# 确定网络流是否已完成读取
我正在完成一个与第三方应用程序集成的项目。该第三方使用本地(环回地址)TCP侦听器来处理请求,并使用XML数据进行响应。在XML之前没有发送大小标头:传输只是用转义序列\r\n关闭。以下是我为解决这个问题而想到的:C# 确定网络流是否已完成读取,c#,networkstream,C#,Networkstream,我正在完成一个与第三方应用程序集成的项目。该第三方使用本地(环回地址)TCP侦听器来处理请求,并使用XML数据进行响应。在XML之前没有发送大小标头:传输只是用转义序列\r\n关闭。以下是我为解决这个问题而想到的: byte[] buffer = new buffer[DefaultBufferSize]; do { bytesRead = networkStream.Read(buffer, 0, buffer.Length); string response = Encod
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数据都是转义的,但换行符不是。所以,我可以潜在地读取一段数据,最后两个字符可能完全匹配终止序列
有没有办法解决这个问题,或者我需要向第三方提出bug请求?您很幸运拥有一个XML文档。XML文档只有一个根节点,当您找到根节点的末尾时,文档就完成了。您可以通过尝试使用解析响应来检查文档的格式是否正确。如果您没有收到任何异常,您的响应将包含一个格式良好的文档,因此将被完全接收
反复调用XDocument.Parse不是一个非常有效的方法,但是如果它足够好,那么您就有了一个简单的实现。那么“EndsWith(“>\r\n”)”呢?因为您可以假设它是一个格式良好的xml,最后一个字符将是“>”,即使您修改代码以适应未替换的换行符,我仍然会提交一个bug请求。如果没有转义字符,您无法保证收到的响应有效,并且您也不知道它们将发送哪些其他字符没有正确转义。