栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Sockect.IO C++客户端的使用——C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Sockect.IO C++客户端的使用——C++

前言

Socket.IO C++基于Boost和WebSocket++,可在多平台上工作(跨平台)。此通信类似于websocket,但是不通用于websocket。

Sockect.io 与Websocket的区别

我在知乎上看到说明两者的区别,感觉比较详细

WebSocket和Socket.io之间的区别(译) - 知乎 (zhihu.com)

Sockect.IO编译

Socket.IO-Client-cpp编译——C++_十年之少的博客-CSDN博客

代码说明

我是比照着 官方的给的示例(socket.io-client-cpp-master/examples/QT/SioChatDemo)进行学习的,官方的示例说明网址是Socket.IO C++ | Socket.IO。

在.h文件上设置命名空间:

using namespace sio;

初始化:获取套接字(socket),可获取含有命名的套件字,具体看需求;

             监听套接字的一些事件,如新消息、用户加入、用户离开等;

             监听客户端的一些事件,如客户端的关闭连接等;

    #ifdef WIN32
    #define BIND_EVENT(IO,EV,FN) 
      do{ 
          socket::event_listener_aux l = FN;
          IO->on(EV,l);
        } while(0)

    #else
    #define BIND_EVENT(IO,EV,FN) 
      IO->on(EV,FN)
    #endif

    
    _io=new client();
    
    
    using std::placeholders::_1;
    using std::placeholders::_2;
    using std::placeholders::_3;
    using std::placeholders::_4;
    socket::ptr sock = _io->socket();
    BIND_EVENT(sock,"new message",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));
    BIND_EVENT(sock,"user joined",std::bind(&MainWindow::OnUserJoined,this,_1,_2,_3,_4));
    BIND_EVENT(sock,"user left",std::bind(&MainWindow::OnUserLeft,this,_1,_2,_3,_4));
    BIND_EVENT(sock,"typing",std::bind(&MainWindow::OnTyping,this,_1,_2,_3,_4));
    BIND_EVENT(sock,"stop typing",std::bind(&MainWindow::OnStopTyping,this,_1,_2,_3,_4));
    BIND_EVENT(sock,"login",std::bind(&MainWindow::OnLogin,this,_1,_2,_3,_4));
    _io->set_socket_open_listener(std::bind(&MainWindow::OnConnected,this,std::placeholders::_1));
    _io->set_close_listener(std::bind(&MainWindow::OnClosed,this,_1));
    _io->set_fail_listener(std::bind(&MainWindow::OnFailed,this));

    connect(this,SIGNAL(RequestAddListItem(QListWidgetItem*)),this,SLOT(AddListItem(QListWidgetItem*)));
    connect(this,SIGNAL(RequestRemoveListItem(QListWidgetItem*)),this,SLOT(RemoveListItem(QListWidgetItem*)));
    connect(this,SIGNAL(RequestToggleInputs(bool)),this,SLOT(ToggleInputs(bool)));

创建连接:

#define kURL "http://localhost:3000"

_io->connect(kURL);

事件响应:各个事件响应不再每个说了,没什么难度。

运行程序

要想玩转示例程序,还需要注意各方努力:

客户端:

1>检查pro文件:在运行前 需要检查SioChatDemo.pro文件所配置的动态库位置;

2>确认填写的服务器的地址;

 服务器:

1>下载服务器代码:https://github.com/Automattic/socket.io/tree/master/examples/chat

2>按照命令运行服务器: 

$ npm i
$ npm start

 当命令行出现:Server listening at port 3000,表示运行成功。

效果图

结束语

此次学习Socket.IO真是有点费劲,虽然代码看着挺清楚,但是环境这块真的费大劲了:编译客户端库、编译Boost、下载服务器代码及运行,其中的弯路不必说。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/975071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号