0

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

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

数据流:


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


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

4

1 回答 1

2

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

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

我有一个与您类似的协议解析示例。它是一个基于libuv. 协议解析模块在这里:package.hpackage.c。希望对你有帮助。:)

于 2013-04-19T06:40:55.250 回答