计网课设 QtC++服务器/客户端 TCP/IP自定义网络协议 新手学习 智能家居远程控制软件

本文介绍了使用Qt实现的服务器和客户端之间的双向通信,包括设备状态同步、远程控制和文字消息交换。通过心跳机制保持连接,并展示了冗长的代码示例,强调了代码重构的需求。客户端和服务器的协议解析功能类似,存在重复代码,且服务器的更新按钮功能冗余。提供了可直接运行的代码下载链接。
摘要由CSDN通过智能技术生成

目录

客户端界面:

服务器界面:

协议设计:

功能:

1、连接

2、改变客户端的设备状态,客户端会自动向服务器发送数据,更新服务器设备

3、服务器远程控制设备,服务器端修改好设备信息,点击更改后,客户端相应设备做出修改

4、其他功能:互发文字消息、心跳机制

代码:


客户端界面:

服务器界面:

协议设计:

功能:

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下载

两个代码逻辑都是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值