自学内容网 自学内容网

网络通信NetClient实现

网络通信NetClient实现

前言

上一集我们就完成了数据中心类的内容,那么我们开始需要进行网络的通信,我们这一集就要封装一个类来帮我们实现网络上的通信。

需求分析

我们这个NetClient类需要完成的事情其实也就那几件,我们之前规定了我们使用两种通信协议,所以我们有这个客户端上需要有http以及websocket的两个客户端,我们网络传输上还需要有一个序列化器。在类里面定义这几个东西之前,我们还需要引入我们的模块和动态库。

引入Http和Websocket模块和动态库

我们需要进入到CMakeLists.txt的文件内,还是和之前引入protobuffer的步骤是一样的。

引入模块

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets NetWork WebSockets Protobuf)

引入动态库

target_link_libraries(ChatClient PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt6::Network Qt6::WebSockets Qt6::Protobuf)

NetClient成员

我们要有那两个协议客户端和一个protobuffer的序列化器,还应该需要有一个成员变量dataCenter。我们的数据中心也应该持有一个NetClient的实例。那么我们废话不多说,直接来看。

 model::DataCenter* dataCenter;

    //http客户端和websocket客户端
    QNetworkAccessManager httpClient;
    QWebSocket webSocketClient;

    //序列化器
    QProtobufSerializer serializer;

由于我们两边的代码都需要放入对方的一个成员变量,所以我们不能传统的放入对方的头文件,要在另一个文件里面放入一个类声明,以避免循环包含头文件。

比如在NetClient的头文件里面放入以下代码

class DataCenter;

那么里面我们继续放入两个URL常量。

    //重要常量
    const QString HTTP_URL = "http://127.0.0.1:8000";
    const QString WEBSOCKET_URL = "ws://127.0.0.1:8001/ws";

这个是在我们的proto文件里面定义的。

那么这一集就先到这里。


原文地址:https://blog.csdn.net/zhuzhu_YT/article/details/143757439

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!