Socket.IO 实现了实时双向的基于事件的通讯机制。旨在让各种浏览器与移动设备上实现实时app功能,模糊化各种传输机制。socket.io解决了实时的通信问题,适合用于消息推送、聊天程序等需要服务器端与客户端实时传输数据的环境。GitHub上的开源代码,我是基于这个代码实现的
代码下载:代码下载 这个客户端实现的功能很简单,就是程序开始运行之后自动连接至服务器,发送一个“chat message”事件,并把服务器发送的内容
显示出来
界面是控制台的,因为我觉得控制台的界面代码相对比较少,更方便阅读,所以就没做UI界面。
另外这个程序的运行需要基于Boost(如果
没有安装boost,
编译会报错),所以在编译之前要安装boost并在
pro文件中增加对boost的依赖。
下面是代码区
头
文件- #include <QObject>
- #include "sio_client.h"
- using namespace std;
- using namespace sio;
- class SocketIOClient: public QObject
- {
- Q_OBJECT
- public:
- std::string url="ws://192.168.0.103:3000/"; //服务器的URL地址
- client *_io; //定义socket.io的客户端
- SocketIOClient();
- void Connect(); //连接至服务器
- void EmitChatMessage(); //发送数据
- void OnNewMessage(std::string const& name,message::ptr const& data,bool hasAck,message::list &ack_resp); //接收数据
- };
注:头文件中的那个sio_client.h是github上的代码(链接我在上面已经贴出了),不是系统自带的。
CPP文件
- #include "SocketIOClient.h"
- #include <QDebug>
- #ifdef WIN32
- #define BIND_EVENT(IO,EV,FN) \
- do{ \
- socket::event_listener_aux l = FN;\
- IO->on(EV,l);\
- } while(0)
- #else
- #endif
- SocketIOClient::SocketIOClient(){
- _io=new client(); //定义一个socket.io客户端对象
- 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函数
- }
- void SocketIOClient::Connect(){
- _io->connect(url);
- }
- void SocketIOClient::EmitChatMessage(){
- QString text="123ABC";
- QByteArray bytes = text.toUtf8();
- std::string msg(bytes.data(),bytes.length());
- _io->socket()->Emit("chat message",msg); //发送"chat message"事件
- }
- void SocketIOClient::OnNewMessage(std::string const& name,message::ptr const& data,bool hasAck,message::list &ack_resp){ //处理接收消息 name位事件名称,data为事件内容
- qDebug()<<"事件名:"<<name.data();
- qDebug()<<"事件内容:"<<data->get_string().data();
- }
main.cpp
- #include <QCoreApplication>
- #include "SocketIOClient.h"
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- SocketIOClient *cl=new SocketIOClient();
- cl->Connect(); //连接至服务器
- cl->EmitChatMessage(); //发送一条消息
- return a.exec();
- }
qt的socketIO客户端这个东西我琢磨了很长时间才做成功,我把一些心得体会写在了自己的博客中
链接 各位大神发现什么问题还请多多指出