当通过简单的二进制协议(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.h和 package.c .希望对您有所帮助。 :)
关于c - libuv - 如何使用二进制协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082005/