目录
2、改变客户端的设备状态,客户端会自动向服务器发送数据,更新服务器设备
3、服务器远程控制设备,服务器端修改好设备信息,点击更改后,客户端相应设备做出修改
客户端界面:
服务器界面:
协议设计:
功能:
1、连接
2、改变客户端的设备状态,客户端会自动向服务器发送数据,更新服务器设备
比如在客户端将厨房的灯打开,服务器相应的灯也会打开
在这里,有个功能是比较累赘的,就是服务器的设置里面的 更新按钮,它的功能是获取客户端 的设备信息,但只要客户端设备改变,服务器设备也会改变,所以该按钮没用。
故障的设备,客户端再改变其状态,不会向服务器发送数据,这样实现的目的就是为了简单的模拟一下设备
3、服务器远程控制设备,服务器端修改好设备信息,点击更改后,客户端相应设备做出修改
4、其他功能:互发文字消息、心跳机制
总结:主要的工作是再服务器和客户端双方写协议,整个工程的代码很臃肿,除了Qt提供的类,其他的感觉写了个C语言,完全没有利用C++类借助设计模式进行好的设计
代码:
服务器端和客户端分别包含1000多行代码,二者代码很多地方都是一致的,特别是协议解析函数,这里只提供主要的通信模块(协议解析模块在通信模块的槽函数 onSocketReadyRead()里)
客户端通信模块:
信号与槽连接:
槽函数实现:
协议解析就是那几个if else 语句,看下图左面的行数比较多,就不展开了
qinte.at(3)是获取的数据首部的第四个字节,判断是协议定义的哪种数据,比如 1 为上文协议解析目录下的excel截图中所显示的,由服务器向客户端发送(S-->C)的状态更新,客户端收到后会发送一个状态恢复(服务器端 qinte.at(3) ==3)的数据。
双方协议处理都包括两个过程 :
过程一、即从UI界面获取信息(设备状态,文字消息),将该消息转换为约定的协议格式
过程二,将接受到的数据按照约定的协议进行解析,改变UI状态
客户端的代码可以直接编译运行,链接(0积分):
network_study_2_Client.zip-互联网文档类资源-CSDN下载
服务器的代码可以直接编译运行,链接(5积分)
network_study_2_Server.zip-互联网文档类资源-CSDN下载
两个代码逻辑都是一样的