Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定网络流是否已完成读取_C#_Networkstream - Fatal编程技术网

C# 确定网络流是否已完成读取

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

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


有没有办法解决这个问题,或者我需要向第三方提出bug请求?

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


反复调用XDocument.Parse不是一个非常有效的方法,但是如果它足够好,那么您就有了一个简单的实现。

那么“EndsWith(“>\r\n”)”呢?因为您可以假设它是一个格式良好的xml,最后一个字符将是“>”,即使您修改代码以适应未替换的换行符,我仍然会提交一个bug请求。如果没有转义字符,您无法保证收到的响应有效,并且您也不知道它们将发送哪些其他字符没有正确转义。