簡體   English   中英

如何在NetworkStream字節數組中放置分隔符?

[英]How to place a delimiter in a NetworkStream byte array?

我正在建立一種在服務器和客戶端之間進行通信的方法。 我現在如何工作,是一個流的第一個字節將包含一個指示器,指示即將發生的事情,然后查找該請求的類我可以確定請求的長度:

stream.Read(message, 0, 1)

if(message == <byte representation of a known class>)
{
    stream.Read(message, 0, Class.RequestSize);
}

我很好奇如何處理類大小未知的情況,如果在讀取已知請求后數據已損壞。

我想我可以在流中插入某種分隔符,但由於一個字節只能在0-255之間,我不知道如何創建一個唯一的分隔符。 我是否要將模式放入流中以表示消息的結束? 我怎樣才能確定這種模式是否足夠獨特,不會被誤認為是實際數據?

對此有不同的方法。 一種選擇是首先發送類名的長度和整個數據包的可能性(例如總是第一個字節)。 這樣你就可以讀取只讀取該字節然后再讀取n個字節來獲取類名。

通過這種方法,您最終不會閱讀惡意客戶端發送給您的許多內容,意圖使您的應用程序成為DoS,並且您可以快速確定您是否已閱讀足夠的數據來處理數據包或者是否尚未完成。

有一些低級字節特別用作分隔符。 文本開頭和文本結尾的(十六進制)值分別為0x02和0x03。 你有標題的開頭加上傳輸結束,0x01和0x04; 你可以使用這些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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