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