2013-04-18 103 views
0

當通過簡單的二進制協議進行通信時,我有客戶端 - 服務器應用程序。當四個字節是數據長度[datasize]和數據大小的數據塊大小時,二進制協議有12個字節的標題(見代碼)。libuv - 如何使用二進制協議

struct header { 
    int32_t message_type; 
    int32_t message_id; 
    int32_t data_size; 
}; 

數據流:


頭|數據| header |數據|


如何通過libuv從客戶端接收二進制數據?你知道libuv處理二進制數據協議的例子嗎?

回答

2

libuv使用異步事件來通知在您撥打uv_read_start後到達的新數據。因此,您可以從回調函數中獲取來自客戶端的二進制數據塊,如void data_callback(uv_stream_t *, size_t, uv_buf_t)

接下來你需要做的就是將二進制數據組合成高層協議。您可以爲每個客戶端設置一個狀態機,爲它提供數據塊,然後在協議包完成時將包發送到更高層。

我有一個類似於你的協議解析示例。它是基於libuv的tcp客戶端。協議解析模塊在這裏:package.hpackage.c。希望它對你有所幫助。 :)