libuv - 如何使用二进制协议

时间:2013-04-18 11:43:00

标签: c protocols binary-data libuv

通过简单的二进制协议进行通信时,我有客户端 - 服务器应用程序。当四个字节是数据长度[datasize]和数据块的数据块大小时,二进制协议有12个字节的头(见代码)。

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

数据流:


标题|数据|    标题|数据|


如何通过libuv从客户端接收二进制数据?你知道libuv处理二进制数据协议的例子吗?

1 个答案:

答案 0 :(得分:2)

libuv使用asyn事件通知您致电uv_read_start后收到的新数据。因此,您可以在回调函数中从客户端获取二进制数据块,例如void data_callback(uv_stream_t *, size_t, uv_buf_t)

接下来您需要做的就是将二进制数据块组合成高层协议。您可以为每个客户端设置状态机,使用数据块为其提供数据,然后在协议包完成时将包发送到更高层。

我有一个类似于你的协议解析示例。它是基于libuv的tcp客户端。协议解析模块位于:package.hpackage.c。希望它对你有所帮助。 :)