3.1 软件平台
LQ聊天软件是基于跨平台Qt类库在Linux下运行的局域网聊天软件。 3.2 开发工具
Linux下Qt Creator 4.5.3版本进行开发。 Linux SQLite3版本的数据库。 3.3 软件架构
LQ聊天软件主要采用MVC模式架构。各个模式之间以接口以及协议进行通信连接。
LQ软件架构模式:
Model模式:主要是数据模型,数据库保存数据。例如:登录个人信息,聊天记录,好友分组等。
Model模式相关类的设计:主要利用Qt只带数据库操作类QSqlDatabase,以及访问类:QsqlQuery。
View模式:主要是视图模型,用于显示软件界面。例如:显示个人信息,显示出错信息,聊天记录,好友分组等。以界面的形式显示数据模型。
View模式相关类的设计: chat_drawer类:主界面 chatWindow类:聊天窗口 toolButton类:好友按钮 infoDialog类:个人信息
ftpclientdialog类:接受文件 fipserverdialog类:发送文件
Control模式:主要控制通信以及Model模式与View模式的同步。例如,修改个人信息,查看聊天记录,清空聊天记录,添加删除分组等。
Control模式相关类设计:MasterControl类:控制通信。 LQ聊天软件架构简介:
该软件主要是视图与数据的结合,以MVC模式架构。主要功能,发送消息与发送文件,必须利用两个线程或者进程去处理,因为考虑到在传送文件时如果用单线程,CPU效率很低,占用率很高,不利于用户界面的显示及用户交互,所以利用多线程处理。在网络通信方面,由于是基于局域网内部利用TCP/IP协议。聊天模块中利用UDP,能大大提高效率。但是在传送文件模块中利用TCP,能大大简化通信协议制定的复杂度,而且更加稳定。
LQ聊天软件架构图:
用户界面查看/更新个人信息查看/更新聊天记录添加/删除分组发送文件发送消息局域网数据库
3.4 软件功能模块:
LQ聊天软件主题界面模块通信控制模块初始化网络模块初始化数据库模块管理个人信息模块管理好友分组模块聊天记录管理模块
发送文件模块发送消息模块3.5 软件数据库设计:
该数据库中有四张表:
lq_user_info表:表示用户个人信息。 lq_user_group表:表示用户好友组。 lq_user_ip表:表示用户好友分组。 lq_user_chatinfo表:表示好友分组。
用户信息 主键ID 用户名 头像 IP地址 主机名 个性签名
图3.1 lq_user_info表ER图
好友组 主键ID 图3.2 lq_user_group表ER图
好友分组 好友组名
主键ID 好友组ID 图3.3 lq_user_ip表ER图
聊天记录 好友IP地址
聊天记录ID 好友ID 聊天信息
图3.4 lq_user_chatinfo表ER图
4 Linux下局域网通讯工具的详细设计与实现
4.1 流程图:
开始初始化网络资源初始化数据库信息判断发送消息线程数据处理主界面显示结束局域网发送文件线程出错处理
4.2 各模块功能实现
主界面图形界面模块实现如下图:
4.3数据库列表
图4.1 lq_user_info表设计图
图4.2 lq_user_group表设计图
图4.3 lq_user_ip表设计图
图4.4 lq_user_chatinfo表设计图
4.4 关键函数
4.4.1 初始化网路模块关键函数:
const QString & getHostName() const ; const QString &getLocalIp() const; bool setLocalIp(); QString getBroadcast(); 4.4.2 初始化数据库模块关键函数: bool initDatabase(); 4.4.3 个人信息模块关键函数:
const User & getUserInfo(); void initHeadList(); void makeSure(); 数
4.4.4 好友分组管理模块关键函数:
void creatModel(); void creatView();
void deleteGroup(); void insertGroup();
void updateGroupName(const QVector void creatLogWindow(); void clearChatLog(); //得到主机 //得到IP地址 //获得并设置IP地址 //获得广播地址 //初始化数据库 //获得用户信息 //初始化本地头像 //自定义确定按钮槽函//创建模型 //创建视图 //创建聊天记录窗口 //清除聊天记录 4.4.6 发送消息模块关键函数: void slotsendmsg(); 4.4.7 发送文件模块关键函数: void sendFileMsg(); //发送文件信息 4.4.8 主界面模块关键函数: void setUser(const User &newUser); //设置用户 void drawUserFace(const User &newUser); //显示用户 void creatGroup(); //创建用户组 void removeAll(); //删除所有用户 void removeUser(const User &user); //移除用户 4.4.9 通信协议: const int HEADID = 0x123456; //通信协议标识 enum ACTION{LOGIN,OUT,SENDMSG,SENDFILE,ACCEPTFILE,REFUSEFILE}; struct message //通信协议的消息结构体 { unsigned int headId; //通信消息标识 unsigned int msgFlag; //消息的标识 unsigned int nameLen; //用户名长度 unsigned int headLen; //头像长度 unsigned int hostNameLen; //主机名长度 unsigned int IpLen; //IP长度 unsigned int writeLen; //个人签名长度 unsigned int msgLen; //发送消息长度 unsigned int fileSize; //文件尺寸 unsigned int fileUrlLen; //发送文件名长度}; typedef struct message MYMSG; //重命名消息结构体 因篇幅问题不能全部显示,请点此查看更多更全内容