簡體   English   中英

確定NetworkStream是否已完成讀取

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM