我試圖定義一個數據包,其長度在ns-3模擬期間確定(將其視爲在下行鏈路上發送的包含調度信息的數據包,調度信息的長度取決於網絡中的節點數量在模擬期間加入/離開網絡)。有沒有人有任何想法我可以如何處理這個?可變大小的數據包
Q
可變大小的數據包
1
A
回答
0
傳統的解決方法是首先發送的長度,然後由數據:
+------------+---------------------+
| uint32_t n | n - 4 bytes of data |
+------------+---------------------+
爲了解碼,讀出的第一個四個字節,然後使用在這些字節的值,以確定有多少更多的數據有是。
0
如何做到這一點的最簡單的介紹是http://www.nsnam.org/support/faq/miscellaneous/#table
在實踐中,如果你想擴展該代碼來存儲可變大小的數據結構,你可以這樣做:
class MyHeader : public Header
{
public:
// new methods
void AppendData (uint16_t data);
std::vector<uint16_t> GetData (void) const;
static TypeId GetTypeId (void);
// overridden from Header
virtual uint32_t GetSerializedSize (void) const;
virtual void Serialize (Buffer::Iterator start) const;
virtual uint32_t Deserialize (Buffer::Iterator start);
virtual void Print (std::ostream &os) const;
private:
std::vector<uint16_t> m_data;
};
我將跳過顯而易見的GetData/AppendData方法。相反,我們可以專注於Serialize/Deserialize方法:
uint32_t
MyHeader::GetSerializedSize (void) const
{
// two bytes of data to store
return m_data.size() * 2;
}
void
MyHeader::Serialize (Buffer::Iterator start) const
{
start.WriteHtonU32(GetSerializedSize());
for (std::vector<uint16_t>::const_iterator i = m_data.begin(); i != m_data.end(); i++)
{
start.WriteHtonU16 (*i);
}
}
uint32_t
MyHeader::Deserialize (Buffer::Iterator start)
{
uint32_t len = start.ReadNtohU32();
for (uint32_t i = 0; i < len; i++) {
m_data.append(start.ReadNtohU16())
}
return 4+len*2;
}
相關問題
- 1. 數據包大小
- 2. Java:使用NIO讀取可變大小的數據包
- 3. 可變大小的數組
- 4. 半徑的最大數據包大小
- 5. sonarqube mssql數據包大小
- 6. OPUS數據包大小
- 7. HTTP/SOAP數據包大小
- 8. 可變大小
- 9. C++數組可變大小的數組
- 10. 最大HTTP數據包大小
- 11. 發現最大數據包大小
- 12. FFmpeg av_read_frame和最大數據包大小
- 13. Android最大UDP數據包大小
- 14. BSD上的TCP數據包的大小
- 15. 在bss和數據段中的整數可變大小
- 16. Oracle中用於數字的可變大小數據類型
- 17. 數據包的字節大小
- 18. 獲取ARP數據包的大小
- 19. 空UDP和TCP數據包的大小?
- 20. 可變大小的C++數組
- 21. 可變大小的數組結構
- 22. 可變大小的指針數組C++
- 23. 爲可變大小的布爾數組
- 24. 創建可變大小的數組
- 25. Java:可變大小的數組int
- 26. 可變大小的位集
- 27. CGContext的可變大小
- 28. 可變大小的類 - C++
- 29. 我可以更改DBD :: mysql使用的數據包大小嗎?
- 30. F#不可變大小的窗口數據結構
謝謝,但我的問題是如何定義這樣的數據包,它就像一個可變大小的數組。請注意,新的字段會根據其長度添加到數據包中?他們應該如何界定? – user2225868
@ user2225868:將數據讀入緩衝區並解析它?我不知道,這是非常標準的C++編程... –