论文部分内容阅读
摘 要:通信软件在公司、企业或学校等内部局域网中应用广泛,实用性较高,可以用于文字沟通和文件传输,交互更加及时并且免费。使用C++网络编程和Qt框架实现了一个局域网点对点通信软件,集成了免账号自动登录、在线用户搜索、文本通信、文件传输等功能,文章论述了软件系统的设计过程,通过集成测试,验证了软件的基本功能,该软件界面简洁,操作人性化,能承担日常工作所需的通信要求。
关键词:C++;Qt框架;文本通信;文件传输
Abstract:Communication software is widely used in LAN of the company,enterprise or school with high practicability. It will be more convenient and free to be used for text communication and file transmission. Using C++ network programming and Qt framework to developing a point-to-point communication software in LAN,which integrates automatic login without account,online user search,text communication,file transmission and other functions. The article discusses the design process of the software system. Through the integration test,the basic functions of the software is verified. The interface of the software is simple,the operation is humanized,and it can meet the communication requirements of daily work.
Keywords:C++;Qt framework;text communication;file transmission
0 引 言
随着计算机网络的发展和多媒体应用的普遍发展,局域网通信软件已经成为企业内部进行沟通交流、信息发布和管理不可或缺的应用平台。同时,对于一些对安全性要求比较高的企事业单位来说,信息的流动具有保密的要求,所以内网不能与互联网进行连接。为了更快、更高效地解决企业在线办公,降低沟通成本,同时兼顾信息安全的要求,以最小的代价来获得最大的安全保护,设计出一款界面简洁、容易上手、运行稳定的局域网通信软件是有实际应用价值的,可以方便企事业单位员工之间的交流与沟通,同时也可用于文件资源的传送,由于使用的是内部网络,可有效降低通信内容被窃听的风险,能够满足一定的保密需求。作者设计和开发的这款软件已经用于广东理工学院的部分机房中,可以用于局域网内教师和学生之间的相互交流,并方便教师进行作业的发布。
1 系统的需求分析
局域网点对点通信软件能提高沟通的效率和准确性,节省人力、物力。软件在功能及性能上主要有以下需求:
(1)软件安装简便,启动快,能迅速打开聊天界面,省去注册登录等麻烦步骤,使操作更简单。以主机名作为登录名,使界面更加简洁。软件上线的同时能发现局域网内部已在线的其他用户名单。有用户上线时,也能及时进行通知,并实时更新用户列表,同时,列表能详细显示用户IP地址、主机名等相关信息。
(2)软件应能够对其他用户请求作出提示,方便用户准确进行选择,能将消息传输到选定的某个用户。同时,当某个用户进行下线操作时,软件及时将通信信号断开,避免占用网络资源,并将下线提示通知在线的其他用户。
(3)在用户进行点对点私聊的情况下,聊天界面能實现背景、文字风格等个性化设置。同时,软件除了提供文字交流的功能,还应能进行文件的发送和接收。局域网内本地用户所有的聊天信息都应记录储存到本地磁盘。
(4)软件退出迅速,无弹窗。可以应用在各种局域网环境,无须服务器,大大减少了对网络带宽的占用,同时也节省能耗。
2 系统设计
根据以上对软件的功能需求,设计了四大功能模块:
(1)用户列表模块:剔除了添加用户,删除用户的功能。只要打开这个软件,软件就自动搜索局域网并添加其他在线用户。
(2)通知模块:主要用于监控用户上线和下线事件,记录相关的时间信息,并以提醒的方式通知其他用户。
(3)私聊模块:该模块所采用的协议是UDP协议,能在一定程度上节省网络资源,私聊内容其他用户不可见,做到一定程度上的保密性。为了信息的备份,软件能够保存聊天记录到本地磁盘上,后期开发可以延伸到云端。
(4)接收发送文件模块:选择TCP协议进行文件的发送和接收,尽量保证在传输过程中文件主体的完整性。接收端显示已接收文件的比例,剩余时间等相关参数。
3 系统的实现
在Qt框架中,可以通过可视化设计进行界面的自动生成,UI中的元素对应XML语言标签的映射,和HTML类似。图标通过setWindowIcon()方法直接进行修改。在聊天框中,提供文字的个性化设置,控件会监听鼠标左键的单击事件,调用messageTextEdit这个基类中的内置函数setFontWeight(),来完成字体加粗的设置。相应的,setFont Style()、setFontItalic()、setFontUnderline()这三个方法,分别用于设置聊天文字的常用字体、倾斜效果和下划线效果。而更改默认字体颜色,则使用getColor()方法获取用户选择的颜色,接着调用setTextColor()方法来实现颜色的设置。这些相关设置完成后,才会调用messageTextEdit()方法将所设置的全部样式应用到接下来要进行的聊天文字上。 3.1 用户列表功能实现
软件的用户列表,如图1所示,在聊天软件界面右边是正在线的用户,用户名是电脑主机的账户名,而主机名则是电脑名,IP地址就是局域网私有地址。在网络传输过程中,当有用户接入,软件将对其监控,并加入相关数据,设置的通讯串口为45454。一般情况下,不能更改电脑名称和IP的地址,用户名称在设计上,没有进行长度的固定,而是自动适应。
通过对用户选择的对象进行判断,如果用户选择的getUserName和getIP的对应值和本机上传的账户名index.row()和本机IPindex.row()一样,将判断为选择用户自己,则不能进行聊天并且会有弹窗警告。通过Qt中的类QTable WidgetItem,完成新存储变量的声明,将其本地主机名、IP地址、用户连接端口进行绑定。通过对界面基类userTable Widget属性进行修改,设置用户名、主机名和IP地址列表行的显示。这样,当用户更改自己的用户名或主机名时,将同步显示在聊天界面中。在该控件中,用户名默认使用登录机器的账户名,用户可以进行重命名操作。
3.2 通知功能实现
软件时刻监控用户接入情况,通过udpSocket->hasPending Datagrams()获取用户连接数,判断其值是否大于等于1,若成立,将用户名、主机名和IP地址:userName,localHost Name,ipAddress属性进行获取,并在用户行控件上进行显示。用户连接成功,会对userName.time进行记录并显示。同样,在用户下线离开时,将对断开时刻进行记录,使用udpSocket()进行套接字的关联,同时利用userNumLabel-> setText传递的值进行实时在线人数的刷新,实现效果如图2所示。
3.3 私聊功能实现
如图3所示,私聊过程中,文字信息的发送和接收正常。字体、大小、颜色等个性化设置均能实现。当用户选择对象进行私聊后,将与接收用户进入同一个新的私聊窗口,该窗口会显示对象用户的电脑名称和IP地址,在该窗口中,还可以选择进行文件的传输。
在用户选择聊天对象后,软件将把IP数据和端口数据进行传递,ui->TableWidget->text,port,触发私聊的窗口Chat->show,将IP数据和端口数据在这个新窗口进行记录。软件接着对用户进行初始化,使用setPolicy对传送过来的数据进行处理,并定义端口为45456。确认后,对双方的IP地址和套接字串口进行绑定,聊天内容由textBrowser进程进行记录。当用户下线时,userName.time进行时间的显示,并关闭私聊窗口。
用戶单击保存聊天记录按钮时,如果ui->textBrowser-> cument->Empty的值为空,会进行弹窗提示用户:QMessage:: warn(0,tr("弹窗提示"),tr("保存出错,聊天为空,无法触发保存进程!"),QMessage::Ok);若不为空,则触发保存弹窗:QStringfileName=QFile::getFileName(this,tr("触发保存聊天进程"),tr("聊天记录进程"),tr("文本(*.txt);All File(* . *)")),创建TXT格式的记事本文件,并要求用户选择存放的目录位置。
3.4 文件传输功能实现
在文件被发送前,利用selectedItems()进行发送对象的绑定,设置需发送文件的编码格式为UTF-8,接收者使用6666端口进行监听,确认接收并选择接收目录后,触发弹出框。框中使用bytesReceived显示文件已接收的大小,speed属性记录文件传输的速度,而useTime显示已经使用的时间。计算已接受的数据量占文件总容量TotalBytes的比例,并实时进行可视化的进度条的更新。最后估算剩余所需时间并显示,如图4所示。
4 结 论
经过对界面和4个功能模块的反复测试,本聊天软件能自动搜索局域网内的用户,无须添加,支持在线的点对点私聊,同时支持任何格式的文件的传输和接收,软件安装便利、界面简洁、上手轻松,同时利用软件进行消息的传输速度快,几乎不占用的网络宽带资源。主要不足之处:该软件未实现加解密功能,消息传输过程中的安全性有待提高;软件的应用场景有限,只能在一般企事业单位的局域网内部进行使用,后续版本可根据企业的实际需求,增加离线留言、用户分组、文件在线编辑等功能。
参考文献:
[1] 王维波,粟宝鹃,侯春望.Qt 5.9 C++开发指南 [M].北京:人民邮电出版社,2018.
[2] 陆文周.Qt 5 开发及实例:第3版 [M].北京:电子工业出版社,2017.
[3] 霍亚飞.Qt Creator快速入门:第1版 [M].北京:北京航空航天大学出版社,2012.
[4] 代勇,李伟,杨宏德,等.Visual C++网络通信编程技术详解 [M].北京:机械工业出版社,2011.
[5] 软件开发技术联盟.Visual C++开发实例大全(基础卷) [M].北京:清华大学出版社,2016.
作者简介:杨成义(1985.09—),男,汉族,湖北孝感人,讲师,硕士研究生,研究方向:群决策支持系统;陈科宏(1995. 09—),男,汉族,广东茂名人,本科,学士学位,研究方向:软件工程。
关键词:C++;Qt框架;文本通信;文件传输
Abstract:Communication software is widely used in LAN of the company,enterprise or school with high practicability. It will be more convenient and free to be used for text communication and file transmission. Using C++ network programming and Qt framework to developing a point-to-point communication software in LAN,which integrates automatic login without account,online user search,text communication,file transmission and other functions. The article discusses the design process of the software system. Through the integration test,the basic functions of the software is verified. The interface of the software is simple,the operation is humanized,and it can meet the communication requirements of daily work.
Keywords:C++;Qt framework;text communication;file transmission
0 引 言
随着计算机网络的发展和多媒体应用的普遍发展,局域网通信软件已经成为企业内部进行沟通交流、信息发布和管理不可或缺的应用平台。同时,对于一些对安全性要求比较高的企事业单位来说,信息的流动具有保密的要求,所以内网不能与互联网进行连接。为了更快、更高效地解决企业在线办公,降低沟通成本,同时兼顾信息安全的要求,以最小的代价来获得最大的安全保护,设计出一款界面简洁、容易上手、运行稳定的局域网通信软件是有实际应用价值的,可以方便企事业单位员工之间的交流与沟通,同时也可用于文件资源的传送,由于使用的是内部网络,可有效降低通信内容被窃听的风险,能够满足一定的保密需求。作者设计和开发的这款软件已经用于广东理工学院的部分机房中,可以用于局域网内教师和学生之间的相互交流,并方便教师进行作业的发布。
1 系统的需求分析
局域网点对点通信软件能提高沟通的效率和准确性,节省人力、物力。软件在功能及性能上主要有以下需求:
(1)软件安装简便,启动快,能迅速打开聊天界面,省去注册登录等麻烦步骤,使操作更简单。以主机名作为登录名,使界面更加简洁。软件上线的同时能发现局域网内部已在线的其他用户名单。有用户上线时,也能及时进行通知,并实时更新用户列表,同时,列表能详细显示用户IP地址、主机名等相关信息。
(2)软件应能够对其他用户请求作出提示,方便用户准确进行选择,能将消息传输到选定的某个用户。同时,当某个用户进行下线操作时,软件及时将通信信号断开,避免占用网络资源,并将下线提示通知在线的其他用户。
(3)在用户进行点对点私聊的情况下,聊天界面能實现背景、文字风格等个性化设置。同时,软件除了提供文字交流的功能,还应能进行文件的发送和接收。局域网内本地用户所有的聊天信息都应记录储存到本地磁盘。
(4)软件退出迅速,无弹窗。可以应用在各种局域网环境,无须服务器,大大减少了对网络带宽的占用,同时也节省能耗。
2 系统设计
根据以上对软件的功能需求,设计了四大功能模块:
(1)用户列表模块:剔除了添加用户,删除用户的功能。只要打开这个软件,软件就自动搜索局域网并添加其他在线用户。
(2)通知模块:主要用于监控用户上线和下线事件,记录相关的时间信息,并以提醒的方式通知其他用户。
(3)私聊模块:该模块所采用的协议是UDP协议,能在一定程度上节省网络资源,私聊内容其他用户不可见,做到一定程度上的保密性。为了信息的备份,软件能够保存聊天记录到本地磁盘上,后期开发可以延伸到云端。
(4)接收发送文件模块:选择TCP协议进行文件的发送和接收,尽量保证在传输过程中文件主体的完整性。接收端显示已接收文件的比例,剩余时间等相关参数。
3 系统的实现
在Qt框架中,可以通过可视化设计进行界面的自动生成,UI中的元素对应XML语言标签的映射,和HTML类似。图标通过setWindowIcon()方法直接进行修改。在聊天框中,提供文字的个性化设置,控件会监听鼠标左键的单击事件,调用messageTextEdit这个基类中的内置函数setFontWeight(),来完成字体加粗的设置。相应的,setFont Style()、setFontItalic()、setFontUnderline()这三个方法,分别用于设置聊天文字的常用字体、倾斜效果和下划线效果。而更改默认字体颜色,则使用getColor()方法获取用户选择的颜色,接着调用setTextColor()方法来实现颜色的设置。这些相关设置完成后,才会调用messageTextEdit()方法将所设置的全部样式应用到接下来要进行的聊天文字上。 3.1 用户列表功能实现
软件的用户列表,如图1所示,在聊天软件界面右边是正在线的用户,用户名是电脑主机的账户名,而主机名则是电脑名,IP地址就是局域网私有地址。在网络传输过程中,当有用户接入,软件将对其监控,并加入相关数据,设置的通讯串口为45454。一般情况下,不能更改电脑名称和IP的地址,用户名称在设计上,没有进行长度的固定,而是自动适应。
通过对用户选择的对象进行判断,如果用户选择的getUserName和getIP的对应值和本机上传的账户名index.row()和本机IPindex.row()一样,将判断为选择用户自己,则不能进行聊天并且会有弹窗警告。通过Qt中的类QTable WidgetItem,完成新存储变量的声明,将其本地主机名、IP地址、用户连接端口进行绑定。通过对界面基类userTable Widget属性进行修改,设置用户名、主机名和IP地址列表行的显示。这样,当用户更改自己的用户名或主机名时,将同步显示在聊天界面中。在该控件中,用户名默认使用登录机器的账户名,用户可以进行重命名操作。
3.2 通知功能实现
软件时刻监控用户接入情况,通过udpSocket->hasPending Datagrams()获取用户连接数,判断其值是否大于等于1,若成立,将用户名、主机名和IP地址:userName,localHost Name,ipAddress属性进行获取,并在用户行控件上进行显示。用户连接成功,会对userName.time进行记录并显示。同样,在用户下线离开时,将对断开时刻进行记录,使用udpSocket()进行套接字的关联,同时利用userNumLabel-> setText传递的值进行实时在线人数的刷新,实现效果如图2所示。
3.3 私聊功能实现
如图3所示,私聊过程中,文字信息的发送和接收正常。字体、大小、颜色等个性化设置均能实现。当用户选择对象进行私聊后,将与接收用户进入同一个新的私聊窗口,该窗口会显示对象用户的电脑名称和IP地址,在该窗口中,还可以选择进行文件的传输。
在用户选择聊天对象后,软件将把IP数据和端口数据进行传递,ui->TableWidget->text,port,触发私聊的窗口Chat->show,将IP数据和端口数据在这个新窗口进行记录。软件接着对用户进行初始化,使用setPolicy对传送过来的数据进行处理,并定义端口为45456。确认后,对双方的IP地址和套接字串口进行绑定,聊天内容由textBrowser进程进行记录。当用户下线时,userName.time进行时间的显示,并关闭私聊窗口。
用戶单击保存聊天记录按钮时,如果ui->textBrowser-> cument->Empty的值为空,会进行弹窗提示用户:QMessage:: warn(0,tr("弹窗提示"),tr("保存出错,聊天为空,无法触发保存进程!"),QMessage::Ok);若不为空,则触发保存弹窗:QStringfileName=QFile::getFileName(this,tr("触发保存聊天进程"),tr("聊天记录进程"),tr("文本(*.txt);All File(* . *)")),创建TXT格式的记事本文件,并要求用户选择存放的目录位置。
3.4 文件传输功能实现
在文件被发送前,利用selectedItems()进行发送对象的绑定,设置需发送文件的编码格式为UTF-8,接收者使用6666端口进行监听,确认接收并选择接收目录后,触发弹出框。框中使用bytesReceived显示文件已接收的大小,speed属性记录文件传输的速度,而useTime显示已经使用的时间。计算已接受的数据量占文件总容量TotalBytes的比例,并实时进行可视化的进度条的更新。最后估算剩余所需时间并显示,如图4所示。
4 结 论
经过对界面和4个功能模块的反复测试,本聊天软件能自动搜索局域网内的用户,无须添加,支持在线的点对点私聊,同时支持任何格式的文件的传输和接收,软件安装便利、界面简洁、上手轻松,同时利用软件进行消息的传输速度快,几乎不占用的网络宽带资源。主要不足之处:该软件未实现加解密功能,消息传输过程中的安全性有待提高;软件的应用场景有限,只能在一般企事业单位的局域网内部进行使用,后续版本可根据企业的实际需求,增加离线留言、用户分组、文件在线编辑等功能。
参考文献:
[1] 王维波,粟宝鹃,侯春望.Qt 5.9 C++开发指南 [M].北京:人民邮电出版社,2018.
[2] 陆文周.Qt 5 开发及实例:第3版 [M].北京:电子工业出版社,2017.
[3] 霍亚飞.Qt Creator快速入门:第1版 [M].北京:北京航空航天大学出版社,2012.
[4] 代勇,李伟,杨宏德,等.Visual C++网络通信编程技术详解 [M].北京:机械工业出版社,2011.
[5] 软件开发技术联盟.Visual C++开发实例大全(基础卷) [M].北京:清华大学出版社,2016.
作者简介:杨成义(1985.09—),男,汉族,湖北孝感人,讲师,硕士研究生,研究方向:群决策支持系统;陈科宏(1995. 09—),男,汉族,广东茂名人,本科,学士学位,研究方向:软件工程。