基于Qt的SocketIO客户端实现 【三】发送与接收

时间:2022-12-15 15:28:57

第一部分:http://blog.csdn.net/qiuchunhuige/article/details/78610289

第二部分:http://blog.csdn.net/qiuchunhuige/article/details/78610306

服务器端的程序与第一部分用的相同,这里就不单列出了。

 

示例程序下载地址:https://pan.baidu.com/s/1c1XvrLQ

此示例程序实现的功能很简单,就是连接至socket.io服务器,发送一条消息并把接收的消息显示出来

编译之前需要先在pro文件中修改boost的路径,否则会编译失败

 

第三部分 数据的发送与接收

 

1. 发送数据

发送数据的核心代码是:_io->socket->Emit(变量1,变量2);

前一个变量是事件名称

如:   

    QString text="123ABC";

    QByteArray bytes = text.toUtf8();

    std::string msg(bytes.data(),bytes.length());

 

    _io->socket()->Emit("chat message",msg); //发送"chat message"事件

这段代码实现的功能是发送"chat message"事件,内容为”123ABC”

2. 接收数据

先绑定事件。下面这段代码执行的内容是:当接收到“chat message”事件的时候,执行OnNewMessage函数

#ifdef WIN32

#define BIND_EVENT(IO,EV,FN) \

    do{ \

        socket::event_listener_aux l = FN;\

        IO->on(EV,l);\

    } while(0)

 

#else

#endif

 

 

    using std::placeholders::_1;

    using std::placeholders::_2;

    using std::placeholders::_3;

    using std::placeholders::_4;

 

    socket::ptr sock=_io->socket();

    BIND_EVENT(sock,"chat message",std::bind(&SocketIOClient::OnNewMessage,this,_1,_2,_3,_4));//绑定事件,当接收到chat message事件时,执行OnNewMessage函数

 

绑定完事件之后,我们就可以编写OnNewMessage函数,处理"chat message"事件。

OnNewMessage函数代码如下,其中第一个参数为事件名称,第二个参数为事件内容。我这里写的处理接收的函数很简单,就是把事件名称和事件内容显示在控制台上

void SocketIOClient::OnNewMessage(std::string const& name,message::ptr const& data,boolhasAck,message::list &ack_resp){ //处理接收消息 name位事件名称,data为事件内容

    qDebug()<<"事件名:"<<name.data();

    qDebug()<<"事件内容:"<<data->get_string().data();

}

3. 运行效果

Qt客户端执行的内容是开始运行之后链接至服务器,连接成功之后发送“chat message”事件,事件内容为“123ABC”,并接收消息(此客户端代码的链接已在上面贴出)。运行此Qt客户端,同时打开一个网页客户端。可以看到网页客户端接受到了“123ABC”的消息,同时在网页客户端发送了内容为“987650”的“chat message”事件之后,Qt客户端也能成功的接收到这一个事件。

基于Qt的SocketIO客户端实现 【三】发送与接收

4. 参考资料

http://socket.io/blog/socket-io-cpp/


原文出自:http://blog.sina.com.cn/s/blog_15d207b300102xybz.html