c - libuv - 如何使用二进制协议(protocol)

标签 c protocols binary-data libuv

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

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

数据流:


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


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

最佳答案

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

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

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

关于c - libuv - 如何使用二进制协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082005/

相关文章:

c - 从用户空间访问注册物理地址

fortran - HDF5 用于使用 Fortran 编写的数据文件

ajax - AJAX 可以使用 HTTP 或 HTTPS 以外的协议(protocol)吗?

swift - 将 InputStream 读入 Data 对象

c# - 如何以二进制帧格式发送数据(TCP)

c - Makefile 抛出重定位错误

c - C 中的数据结构

c - 内存分配和复制到新结构

mongodb - 查询失败时清空 $err 文档

ios - 自定义单元格中的委托(delegate)