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