1
A
回答
1
你需要記住的主要事情是endianness。也就是說,在不同的平臺上,解釋字節的順序是不同的。
例如,英特爾的CPU可能會解釋字節串0x01 0x00
是1號,但別人的PowerPC將其解釋字節該字符串是數256
當建立一個網絡協議,這一點很重要記住這樣的問題。 (你可能看起來像Google Protocol Buffers,這是爲了解決這個問題)
由於你只是談論兩個字節,你還應該看看htons()
宏。這將從主機順序到網絡順序的2字節的值。 (網絡命令是big endian,而主機命令通常是little endian,但在大端平臺htons()
可以簡單地定義爲no-op。)如果要發送4字節(32位)值,你還應該看看htonl()
宏。 htons
代表主機到網絡短路,並會將您的16字節值轉換爲等效網絡指令 16位值(如果您在Intel CPU上,則表示它將返回16位版本整數與字節交換)。當你有傳入字節時,你的代碼應該使用ntohs
(和ntohl
,對於32位值)宏來將傳入數據從網絡字節順序轉換回主機順序。
0
此外,您顯然希望使用單個套接字寫入操作發送兩個字節。不要寫一個字節,然後使用兩個寫入寫另一個字節,因爲這可能最終導致線路效率低下。也就是說,不要寫uint8_t [0],後跟uint8_t [1]。寫& uint16_t會避免這種情況。
相關問題
- 1. 字節到與TCP套接字發送的字節
- 2. C++將字符串轉換爲通過tcp發送的字節
- 3. TCP發送/接收丟失字節
- 4. 發送與TCP/IP
- 5. 從同一TCP連接發送字節數組和字節
- 6. C#TCP嘗試發送值爲字符
- 7. VB6整數到兩個字節(C短)通過串行發送
- 8. 使用TCP套接字發送/讀取,字節大小異常
- 9. 通過TCP發送多個文件與C#使用TcpClient
- 10. 發送兩個字符串,但收到一個通過TCP
- 11. 60個字節的Tcp數據包,無數據發送
- 12. Windows TCP keepalive發送1個字節的郵件沒有PSH
- 13. 發送一個Java UUID到C++作爲字節並返回到TCP
- 14. 通過TCP套接字的Android發送/接收字節[]通過TCP套接字
- 15. 發送TCP數據與PHP
- 16. 通過套接字發送字符和字節(TCP)
- 17. C#字節流通過TCP
- 18. 僅在發送幾百個字節後發送()與EAGAIN失敗
- 19. C++:通過tcp/ip在發送字節中使用向量的最佳方法
- 20. 通過TCP套接字發送圖像字節更改
- 21. 通過TCP套接字發送/接收字節[]
- 22. 在java中通過TCP發送混合字符串和字節
- 23. 用C#中的.net UDP套接字發送一個字節
- 24. Java套接字無法發送兩個字節數組
- 25. 使用tcp發送字符串數組
- 26. 使用tcp套接字發送結構
- 27. 使用Scapy發送tcp負載:爲什麼要吃一個字節?
- 28. 使用期望發送單個字節
- 29. 發送兩個緩衝區一個字節
- 30. 使用QTcpSocket發送字節