Qt/E客户端到服务器命令的传递

简介:     服务器负责各种资源的统一管理,而客户端则是各种为用户进行各种服务的地方,用户的各种请求都是在客户端进行真正的处理。而客户端在计算完毕以后要输出结果则必须通过服务器进行。客户端到服务器的请求是表现为QWSCommand的实例,数据通道仍然是Unix域socket。

    服务器负责各种资源的统一管理,而客户端则是各种为用户进行各种服务的地方,用户的各种请求都是在客户端进行真正的处理。而客户端在计算完毕以后要输出结果则必须通过服务器进行。客户端到服务器的请求是表现为QWSCommand的实例,数据通道仍然是Unixsocket。下图列出了客户端到服务器的所有请求,这些请求大部分是使用Qt开发的程序员无须知道的,在移植Qt的过程中也无需做任何改动。

img_074c8970e3e93f9e3c11d9d9488b3c0d.jpe

    客户端到服务器的通信过程同服务器到客户端的通信一样,首先是串行化,通过socket发送,到了服务器端,服务器再反串行化得到QWSCommand的实例。读者可能注意到QWSCommandQWSEvent都是继承与QWSProtocolItem,实际上串行化的工作由QWSProtocolItem提供,而QWSCommand的子类使用它提供的函数将自己特定的数据串行化。下面给出了QWSCommand的原型,结构非常简单,主要是定义了Command的类型以及制造Command的工厂函数,这里的factory和前面讲到的QWSEvent方式是一样的,就不赘述了。

struct QWSCommand : QWSProtocolItem

{

    QWSCommand(int t, int len, char *ptr) : QWSProtocolItem(t,len,ptr) {}

    enum Type {

        Unknown = 0,

……

        GrabMouse,

……

    };

    static QWSCommand *factory(int type);

};

    接下来我们以QWSGrabMouseCommand为例来讲解客户端到服务器的请求的传递过程,流程图见下图

img_7b65ae951734ae4978692b23c6c8ea38.jpe

 

QWSGrabMouseCommand是客户端想独自占有鼠标时发出的请求。windowidQt内部表示的窗口ID,每一个command都包含该id。grab如果为true表示请求占有鼠标,为false则表示请求释放鼠标,下面给出了QWSGrabMouseCommand的原型。

struct QWSGrabMouseCommand : public QWSCommand

{

    QWSGrabMouseCommand() :

        QWSCommand(QWSCommand::GrabMouse,

                    sizeof(simpleData), reinterpret_cast<char *>(&simpleData)) {}

 

    struct SimpleData {

        int windowid;

        bool grab;  // grab or ungrab?

    } simpleData;

};

服务器在检测到与客户端的连接有数据到来以后需要首先反串行化,然后依据具体的请求做出相应的处理。具体流程见下图:

 

img_2c411a9df7eb6636a370260d9d4fea04.jpe

 

目录
相关文章
|
2月前
|
消息中间件 运维 网络协议
客户端和服务器之间的通信
客户端和服务器之间的通信
32 0
|
2月前
|
监控 关系型数据库 Linux
|
28天前
|
Linux Shell 网络安全
【Shell 命令集合 网络通讯 】Linux 与SMB服务器进行交互 smbclient命令 使用指南
【Shell 命令集合 网络通讯 】Linux 与SMB服务器进行交互 smbclient命令 使用指南
40 1
|
12天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
27天前
|
网络协议 安全 Shell
【Shell 命令集合 系统设置 】Linux 从远程时间服务器获取当前日期和时间 rdate命令 使用指南
【Shell 命令集合 系统设置 】Linux 从远程时间服务器获取当前日期和时间 rdate命令 使用指南
33 0
|
28天前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
29 0
|
28天前
|
Shell Linux Apache
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
156 1
|
1月前
|
监控 网络安全 C++
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
Qt 5.14.2 网络编程揭秘:构建高效HTTP客户端与文件下载器
|
1月前
|
Linux Shell 调度
PBS任务脚本模板及常用服务器PBS命令介绍
【2月更文挑战第21天】本文介绍在Linux服务器中,通过PBS(Portable Batch System)作业管理系统脚本的方式,提交任务到服务器队列,并执行任务的方法~
105 4
PBS任务脚本模板及常用服务器PBS命令介绍
|
1月前
|
Linux
一个能够在 ABAP 服务器执行 linux 命令的小工具
一个能够在 ABAP 服务器执行 linux 命令的小工具
15 0

热门文章

最新文章

推荐镜像

更多