簡體   English   中英

套接字消息頭構建

[英]Socket message header building

我正在研究一種協議,該協議將通過tcp套接字傳輸xml數據塊。 現在說我需要從xml文件讀取所有字節並建立一個內存緩沖區。 然后,在發送實際數據字節之前,我需要將一個標頭發送到另一對等端。 說我的協議使用以下標題類型。

郵件ID = 100,大小= 232,CRC = 190

string strHeader = "100,232,190"

現在,我想知道如何針對任意數量的xml數據將此標頭長度固定(其他標點將其標識為標頭需要固定標頭長度)。 當前說我有一個283637bytes的xml文件,因此消息頭看起來像。

string strHeader = "100,283637,190"

如何使它對任何大小的數據通用? 該代碼同時用c ++和c#編寫。

有很多方法可以做到這一點。

固定長度

您可以用前導零填充數字,以便您確切知道需要使用的文本長度。 000100,000232,000190

使用字節代替字符串

如果使用整數,則可以將字節讀取為整數,而不用操縱字符串。 查看BinaryReader類。 如果需要在C ++端執行此操作,則概念仍然相同。 我確信有很多方法可以將4個字節轉換為一個int。

在開頭指定長度

通常在使用動態長度字符串時。 有一個指示符,指出要獲取整個字符串需要讀取多少個字節。 您可以將消息的前4個字節指定為字符串的長度,然后讀取到該點為止。

最好的方法是將其實現為類似的結構

struct typedef _msg_hdr {
     int messageID;
     int size;
     int crc;
}msg_hdr;

這將始終具有12個字節的長度。 現在,在發送消息時,首先將標頭發送給接收者。 接收者應以相同的結構接收它。 這是最好,最簡單的方法

暫無
暫無

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

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