2013-04-18 65 views
0

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

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

数据流:


头|数据| header |数据|


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

回答

2

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

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

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