标签: c protocols binary-data libuv
通过简单的二进制协议进行通信时,我有客户端 - 服务器应用程序。当四个字节是数据长度[datasize]和数据块的数据块大小时,二进制协议有12个字节的头(见代码)。
struct header { int32_t message_type; int32_t message_id; int32_t data_size; };
数据流:
标题|数据| 标题|数据|
如何通过libuv从客户端接收二进制数据?你知道libuv处理二进制数据协议的例子吗?
答案 0 :(得分:2)
libuv使用asyn事件通知您致电uv_read_start后收到的新数据。因此,您可以在回调函数中从客户端获取二进制数据块,例如void data_callback(uv_stream_t *, size_t, uv_buf_t)。
libuv
uv_read_start
void data_callback(uv_stream_t *, size_t, uv_buf_t)
接下来您需要做的就是将二进制数据块组合成高层协议。您可以为每个客户端设置状态机,使用数据块为其提供数据,然后在协议包完成时将包发送到更高层。
我有一个类似于你的协议解析示例。它是基于libuv的tcp客户端。协议解析模块位于:package.h和package.c。希望它对你有所帮助。 :)