基于QT的局域网跨平台即时通信软件.docx
- 文档编号:8821181
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:44
- 大小:7.89MB
基于QT的局域网跨平台即时通信软件.docx
《基于QT的局域网跨平台即时通信软件.docx》由会员分享,可在线阅读,更多相关《基于QT的局域网跨平台即时通信软件.docx(44页珍藏版)》请在冰豆网上搜索。
基于QT的局域网跨平台即时通信软件
目录
1引言1
1.1设计的目的及意义1
1.2开发背景2
2开发技术简介3
2.1开发工具简介3
2.2开发技术简介4
3需求分析10
3.1功能需求分析10
3.2数据需求分析11
3.3技术需求分析12
3.4性能需求分析12
3.4编写环境需求分析12
4软件设计与代码分析13
4.1软件结构设计13
4.2各模块功能流程图及联系14
4.3各模块功能具体设计与代码实现22
5软件测试37
5.1模块测试37
5.2功能测试38
5.3测试结果39
6结束语47
参考文献48
致谢49
Contents
1Introduction1
1.1ThePurposeAndSignificanceOfDesign1
1.2BackgroundofDevelopment2
2DevelopmentOfTechnicalBrief3
2.1DevelopmentToolProfile3
2.2DevelopmentOfTechnicalBrief4
3DemandAnalysis10
3.1FunctionalRequirementsAnalysis10
3.2AnalysisOfDataNeeds11
3.3TechnicalRequirementAnalysis12
3.4PerformanceNeedsAnalysis12
3.4AuthoringEnvironmentNeedsAnalysis12
4SoftwareDesignAndCodeAnalysis13
4.1SoftwareArchitectureDesign13
4.2FunctionsOfEachModuleFlowchartAndContact14
4.3TheSpecificDesignOfEachModuleAndCodeImplementation23
5SoftwareTesting38
5.1ModuleTesting38
5.2FunctionalTesting38
5.3TestResults39
6Conclusion47
References48
Acknowledgements49
圈圈通信
——基于QT的局域网即时通信软件的设计与实现
****************
*************
【摘要】圈圈通信是面向局域网的即时通讯工具,可以实现文本聊天,视频通话文件传输等功能。
本软件的设计与实现也并不是完全为了毕业论文而做的无用软件,其本身也有很大的实用性。
首先本软件抓住了市场上没有linux实用的的局域网即时通讯工具,仅有的几个网络通讯工具还必须连接Internet网络,在没有连接外网的情况下无法使用。
基于此我想到了开发一套这样的软件,功能是允许linux用户享受到高速便捷的局域网通信工具给他们的学习和生活带来的便利。
软件的跨平台特性也使得同局域网内的不同平台的用户可以进行无障碍的信息文件的传输。
解决了一直以来linux用户和windows用户在没有外网的情况下相互传输信息和文件的窘境。
整套软件使用QT开发工具设计开发,充分的利用了QT库的跨平台特性。
同时在linux版本的软件上已经实现了视频通话的功能。
期间还涉及到了部分C语言的知识,还有摄像头驱动V4l2的使用。
用到的主要通信协议是TCP/IP中的TCPServerUdpSocket,当然其中有采用QT库的也有采用C语言库的相应的API。
在QT开发平台为用户提供了丰富的API和开发实例,方便了开发者的使用。
本论文将对软件的各处重要的功能流程、实现原理、代码实现和使用到的相关技术做详细的论述和解释。
【关键词】局域网即时通讯;V4l2;QT;TCP/IP;UdpSocket;API;跨平台;linux
CircleCommunication
——BasedQTLANcross-platforminstantmessagingsoftware,design
AndImplementation
LiYouchao
Pro.ZhangLiang
【Abstract】ThecircleofcommunicationisinstantmessagingtoolforLAN,youcantextchat,videocallsandfiletransferfunction.DesignandimplementationofthissoftwareisnotcompletelysatforThesisanduselesssoftware,itsgreatpracticality.Firstofall,thissoftwarecapturesthemarketlinuxpracticalLANinstantmessagingtools,onlyafewnetworkcommunicationtoolsmustbeconnectedtotheinternetnetwork,notconnectedtotheextranetpagecannotbepractical.Basedonthis,IthoughttodevelopasoftwarewhosefunctionistoallowLinuxuserstoenjoyconvenienthigh-speedLANcommunicationtooltotheirlearningandlifeconvenience.Thecross-platformfeaturesofthesoftwarealsoallowsusersondifferentplatformswithinthesameLANcanbeabarrier-freefiletransfers.Inonefellswoopsolvethedilemmaoflinuxusersandwindowsusershavebeeneachotherincasethereisnoexternalnetworktotransferinformationandfiles.UsetheentiresoftwaredesignanddevelopmentofQTdevelopmenttoolstakefulladvantageofcross-platformfeaturesoftheQTlibrary.AtthesametimeontheLinuxversionofthesoftwarehasachievedavideocallfunctionality.TheperiodalsoinvolvessomeknowledgeofClanguage,orthecameradriveV4l2use.ThemaincommunicationprotocolusedisTCP/IPTCPServerUdpSocket,ofcourse,usingtheQTlibraryusingtheAPIoftheClanguagelibrary.Fortunately,theQTdevelopmentplatformtoprovideuserswithrichAPIanddevelopmentinstance,moreconvenientuseofdevelopment.
Thispaperwillthroughouttheimportantfunctionsofthesoftwareprocess,principle,codeandrelatedtechnologiestousetodoadetaileddiscussionandinterpretation.
【Keywords】LANInstantMessaging;V4l2;QT;TCP/IP;UdpSocket;API;Cross-platform;
1引言
1.1设计的目的及意义
即时通信软件是大家都比较熟悉的一种网络通信工具,而且网络上有很成熟的应用,比如腾讯QQ、飞信、飞鸽、飞秋等等。
这些为我们的工作生活和学习交流带来了很大的方便。
但是这些软件大都是只在Windows平台下才有,尤其是飞信、飞鸽、飞秋,只有Windows的版本,并没有Linux版本,而且QQ等其他工具在Windows和Linux互通时也极为的不方便,在最新版的Linux上QQ只能网页登陆。
所以对于Linux用户来说市场上如果出现一款Linux系统下或者是跨平台的软件能够提供即时聊天、文件传输、视频通话等功能,这将大大的方便用户的生活工作和学习。
该程序的设计的目的就是为Linux用户,还有跨平台的群组用户提供一个实用的交流工具,实现局域网内部各个平台上用户的信息交流,文件传输等等。
同时,由于本软件是面向局域网用户的,所以就省去了互联网通信软件复杂的登陆过程,简单的双击即可运行使用,并且不要求用户接入互联网就能运行使用,只要在一个局域网内即可进行通信,这也是局域网通信的一大优点。
本软件主要有以下几大应用:
1.跨平台的通信聊天。
局域网内各个平台上的用户可使用本软件件进行方便的安全的聊天交流,并且还提供全网群组聊天功能,更加方便集体交流,为用户的学习、工作带来方便,从而提高用户的学习和作效率。
2.跨平台的文件传输。
本软件为用户提供了高速的文件传输功能,并且同时也可实现跨平台的高速文件传输,这是其他即时通信工具所不具有的。
解决了平时不同平台上的用户最为头疼的非得用U盘的存储介质来回的粘贴复制的窘境。
极大的方便了用户。
这恐怕也是局域网即时通讯软件最为常用的功能。
跨平台的局域网高速文件传输也正是本软件的市场切入点,具有一定的市场前景。
3.视频通话。
本软件同时为Linux用户提供了视频通话的功能,从而为用户提供了更加有声有色的的交流方式,在局域网内使用语音聊天或许大部分时候都有些不合时宜。
但是进行视频交流的话,无疑提高了用户之间的交流乐趣与效率,而且利用局域网网络通信高速、安全的特点,视频通话的优点体现的也就更加的淋漓尽致。
本软件的设计的意义:
本软件的设计的意义很明显,在就是为了方便用户的工作和学习,同时本软件如果在Linux上发布,届时肯定为开源软件,也为广大的互联网用户提供一个良好的教材,同时也可以集合众多的互联网用户之力来完善本软件。
1.2开发背景
随着网路的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要,人们可以通过这个空间进行网络聊天,实现彼此沟通,交换信息,甚至网络聊天工具在部分人的生活中由于传统的电话通讯手段同等重要的趋势。
目前市场上的的即时通信工具虽然种类很多,且应用也比较成熟,但是这并不意味着这些软件对于市场的完全覆盖。
目前市场上依然有着通信软件的盲区,在这几年的学习的应用中,我发现Linux系统上就没有一款比较好的局域网即时通信软件。
局域网的即时通信软件是以企业内部办公,建立员工交流平台为基础通过系统整合,边缘功能和实时协作的方案。
由于企业对信息类软件的需求还在“探索”和“尝试”阶段,所以会导致很多系统不能互通,如Linux和Windows,这也成了局域网即时通信软件的一个使命。
当信息软件被广泛使用之后,“互通”接口是否具备,将被作为软件选用的重要条件。
本软件针对市场上的此类现象专门选用的QT跨平台开发环境使用跨平台的跨平台标准库,使得软件可以在不同的平台上编译运行,实现跨平台通信的目的,尤其是在传输文件的时候这种特性的优势将更加明显。
2开发技术简介
2.1开发工具简介
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt、基于FrameBuffer的QtopiaCore、快速开发工具QtDesigner和国际化工具QtLinguist等部分。
Qt支持所有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k、Windows95/98平台。
基本上Qt同X-Window上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL是同类型的。
不过Qt还具有下列一些优点:
(1)优良的跨平台特性
Qt支持下列操作系统:
MicrosoftWindows95/98、MicrosoftWindowsNT、Linux、Solaris、SunOS、HP-UX、DigitalUNIX(OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。
(2)面向对象
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
(3)丰富的API
Qt包括多达250个以上的C++类,还提供基于模板的collections、serialization、file、I/Odevice、directorymanagement和date/time类。
甚至还包括正则表达式的处理功能。
(4)支持2D/3D图形渲染,支持OpenGL
(5)大量的开发文档
(6)XML支持
但是真正使得Qt在自由软件界的众多Widgets(如Lesstif、Gtk、EZWGL、Xforms及fltk等)中脱颖而出的还是基于Qt的重量级软件KDE。
Qt虽然是商业公司的产品,但是走的却是开源路线,提供免费下载,全部都是开放源代码,非商业用途亦采用GPL的版权宣告,著名的OpenSource"KDE"项目便是采用Qt开发的。
Trolltech也针对嵌入式环境推出了Qt/Embedded产品。
与桌面版本不同,Qt/Embedded已经直接取代了XServer及XLibrary等角色,将所有的功能全部整合在一起。
Qt/Embedded同样具有跨平台的特点,省掉了不少移植软件的功夫,这样的概念和Java十分接近。
同时它还采用模块化设计,其最大的好处是有弹性,Qt/Embedded号称最小,可以缩到800KB左右,最多可以长到3MB(forIntelx86),这样的弹性也让Qt/Embedded更适合在嵌入式环境下生存。
Qt/Embedded延续了Qt在X上的强大功能,在底层摒弃了Xlib,仅采用FrameBuffer作为底层图形接口。
同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏及用户自定义的设备等。
Qt/Embedded类库完全采用C++封装。
丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面。
它的类库接口完全兼容于同版本的Qt-X11,使用X下的开发工具可以直接开发基于Qt/Embedded的应用程序QUI界面。
与前两种GUI不同的是,Qt/Embedded的底层图形引擎只能采用FrameBuffer,这就注定了它是针对高端嵌入式图形领域的应用而设计的。
由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱,各种补丁较多的问题。
Qt/Embedded的结构也过于复杂和臃肿,很难进行底层的扩充、定制和移植,尤其是用来实现signal/slot机制的moc文件。
Qt/Embedded当前已经升级为QtopiaCore和QtopiaCore,继承了Qt4的新技术,包括:
高性能渲染引擎、模板容器类及基于行为的主窗口架构,改进的功能特点包括文本渲染与多线程技术。
当编译QtopiaCore时,可以去除不用的功能,以最小化软件的占用空间。
2.2开发技术简介
本软件的开发所使用的技术总的来说可以分为以下几大类:
(1)用来进行通信的部分,Tcpsocket通信和Qudpsocket
TCP即TransmissionControlProtocol,传输控制协议。
与UDP不同,它是面向连接和数据流的可靠传输协议。
也就是说,它能使一台计算机上的数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。
TCP协议的程序使用的是客户端/服务器模式,在QT中,使用QTcpServer类建立服务器。
我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行相互之间套接字的建立。
一旦有数据到来相应端的套接字就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。
其通信模型如图:
Qudpsocket则是一种面向无连接的的不可靠的数据传输技术,他可以不用tcp所需的连接,所以这种协议是尽最大努力的交付数据,这种协议在网络环境较好的局域网内应用相当有价值。
其通信模型如图:
(2)信号和槽是Qt编程的一个重要部分。
这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。
在前几个例程中,我们已经连接了信号和槽,声明了控件自己的信号和槽,并实现了槽函数,发送了信号。
槽和普通的c++成员函数很像。
它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的(protective),也可是私有的(private),它们可以象任何c++成员函数一样被调用,可以传递任何类型的参数。
不同在于一个槽函数能和一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。
connect函数语法如下:
connect(sender,SIGNAL(signal),receiver,SLOT(slot));
sender和receiver是QObject对象指针,signal和slot是不带参数的函数原型。
SIGNALE()和SLOT()宏的作用是把他们转换成字符串。
在目前有的例子中,我们已经连接了不同的信号和槽。
实际使用中还要考虑入戏一些规则:
(一)一个信号可以连接到多个槽:
connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));
connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));
当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。
(二)多个信号可以连接到一个槽
connect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));
connect(calculator,SIGNAL(divisionByZero()),this,SLOT(handleMathError()));
任何一个信号发出,槽函数都会执行。
(三)一个信号可以和另一个信号相连
connect(lineEdit,SIGNAL(textChanged(constQString&)),this,SIGNAL(updateRecord(constQString&)));
第一个信号发出后,第二个信号也同时发送。
除此之外,信号与信号连接上和信号和槽连接相同。
(四)连接可以被删除
disconnect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));
这个函数很少使用,一个对象删除后,Qt自动删除这个对象的所有连接。
信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接:
connect(ftp,SIGNAL(rawCommandReply(int,constQString&)),this,SLOT(processReply(int,constQString&)));
如果信号里的参数个数多于槽函数的参数,多余的参数被忽略:
connect(ftp,SIGNAL(rawCommandReply(int,constQString&)),this,SLOT(checkErrorCode(int)));
如果参速类型不匹配,或者信号和槽不存在,在debug状态时,Qt会在运行期间给出警告。
如果信号和槽连接时包含了参数的名字,Qt将会给出警告。
以前我们列举的例子中都是控件的信号和槽。
但是信号和槽机制在QObject中就实现了,可以实现在任何从QObject继承的子类中。
(3)用于采集摄像头数据的V4l2驱动API以及图像压缩技术
V4L(VideoforLinux)是Linux内核中关于视频设备的子系统,它为linux下的视频驱动提供了统一的接口,使得应用程序可以使用统一的API函数操作不同的视频设备,极大地简化了视频系统的开发和维护。
由于V4L有很多缺陷,BillDirks等人对其进行了重新设计,并取名为VideoforLinuxTwo(V4L2),最早出现于Linux2.5.x版本。
V4L2相比于V4L有更好的扩展性和灵活性,并且支持的硬件设备更多。
但是需要注意的是,V4L2对V4L进行了彻底的改造,因而两者并不兼容。
Linux系统中,所有的外部设备都被看成一种特殊的文件,称之为设备文件。
应用程序可以通过访问这些特殊文件实现对应设备的控制。
V4L2视频设备的设备文件为/dev目录下的videoN(N为0~63)文件,其主设备号为81,次设备号为N(N为0~63)。
在v4l2中有主要的技术参数如下:
VIDIOC_REQBUFS:
分配内存
VIDIOC_QUERYBUF:
把VIDIOC_REQBUFS中分配的数据缓存
换成物理地址
VIDIOC_QUERYCAP:
查询驱动功能
VIDIOC_ENUM_FMT:
获取当前驱动支持的视频格式
VIDIOC_S_FMT:
设置当前驱动的频捕获格式
VIDIOC_G_FMT:
读取当前驱动的频捕获格式
VIDIOC_TRY_FMT:
验证当前驱动的显示格式
VIDIOC_CROPCAP:
查询驱动的修剪能力
VIDIOC_S_CROP:
设置视频信号的边框
VIDIOC_G_CROP:
读取视频信号的边框
VIDIOC_QBUF:
把数据从缓存中读取出来
VIDIOC_DQBUF:
把数据放回缓存队列
VIDIOC_STREAMON:
开始视频显示函数
VIDIOC_STREAMOFF:
结束视频显示函数
VIDIOC_QUERYSTD:
检查当前视频设备支持的标准,例如PAL
或NTSC(有些是必须的有些是可选择的)。
结构体:
structv4l2_requestbuffersreqbufs;//向驱动申请帧缓冲的请求,里
包含申请的个数
structv4l2_capab
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 QT 局域网 平台 即时 通信 软件