基于QT的局域网跨平台即时通信软件 毕业论文.doc

上传人:文库蛋蛋多 文档编号:2392752 上传时间:2023-02-17 格式:DOC 页数:56 大小:9.45MB
返回 下载 相关 举报
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第1页
第1页 / 共56页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第2页
第2页 / 共56页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第3页
第3页 / 共56页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第4页
第4页 / 共56页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《基于QT的局域网跨平台即时通信软件 毕业论文.doc》由会员分享,可在线阅读,更多相关《基于QT的局域网跨平台即时通信软件 毕业论文.doc(56页珍藏版)》请在三一办公上搜索。

1、. . 山东农业大学毕 业 论 文 题目: 圈圈通信 基于QT的局域网跨平台即时通信软件 院 部 信息科学与工程学院 专业班级 * 届 次 2012届 学生姓名 * 学 号 * 指导教师 * 二一 二 年 五 月 二十三 日装订线. . . 圈圈通信基于QT的局域网跨平台即时通信软件的设计与实现Circle CommunicationBased QT LAN cross-platform instant messaging software designAnd Implementation专业Speciality网络工程Network Engineering学生Undergraduate 指导

2、教师Supervisor山东农业大学二一 二 年六月Shandong Agricultural UniversityJune, 2012目 录1 引言11.1 设计的目的及意义11.2 开发背景22 开发技术简介32.1 开发工具简介32.2开发技术简介43 需求分析103.1 功能需求分析103.2 数据需求分析113.3 技术需求分析123.4 性能需求分析123.4 编写环境需求分析124 软件设计与代码分析134.1 软件结构设计134.2 各模块功能流程图及联系144.3 各模块功能具体设计与代码实现225 软件测试375.1 模块测试375.2 功能测试385.3 测试结果396

3、结束语47参考文献48致谢49Contents1 INTRODUCTION11.1 THE PURPOSE AND SIGNIFICANCE OF DESIGN11.2 BACKGROUND OF DEVELOPMENT22 DEVELOPMENT OF TECHNICAL BRIEF32.1 DEVELOPMENT TOOL PROFILE32.2 DEVELOPMENT OF TECHNICAL BRIEF43 DEMAND ANALYSIS103.1 Functional Requirements Analysis103.2 Analysis Of Data Needs113.3 Tec

4、hnical Requirement Analysis123.4 Performance Needs Analysis123.4 Authoring Environment Needs Analysis124 SOFTWARE DESIGN AND CODE ANALYSIS134.1 Software Architecture Design134.2 Functions Of Each Module Flowchart And Contact144.3 The Specific Design Of Each Module And Code Implementation235 SOFTWARE

5、 TESTING385.1 Module Testing385.2 Functional Testing385.3 Test Results396 Conclusion47REFERENCES48ACKNOWLEDGEMENTS49圈圈通信基于QT的局域网即时通信软件的设计与实现 * * *【摘要】圈圈通信是面向局域网的即时通讯工具,可以实现文本聊天,视频通话文件传输等功能。本软件的设计与实现也并不是完全为了毕业论文而做的无用软件,其本身也有很大的实用性。首先本软件抓住了市场上没有linux实用的的局域网即时通讯工具,仅有的几个网络通讯工具还必须连接Internet网络,在没有连接外网的情况下

6、无法使用。基于此我想到了开发一套这样的软件,功能是允许linux用户享受到高速便捷的局域网通信工具给他们的学习和生活带来的便利。软件的跨平台特性也使得同局域网内的不同平台的用户可以进行无障碍的信息文件的传输。解决了一直以来linux用户和windows用户在没有外网的情况下相互传输信息和文件的窘境。整套软件使用QT开发工具设计开发,充分的利用了QT库的跨平台特性。同时在linux版本的软件上已经实现了视频通话的功能。期间还涉及到了部分C语言的知识,还有摄像头驱动V4l2的使用。用到的主要通信协议是TCP/IP 中的 TCPServer UdpSocket,当然其中有采用QT库的也有采用C语言库

7、的相应的API。在QT开发平台为用户提供了丰富的API和开发实例,方便了开发者的使用。 本论文将对软件的各处重要的功能流程、实现原理、代码实现和使用到的相关技术做详细的论述和解释。【关键词】局域网即时通讯;V4l2;QT;TCP/IP ;UdpSocket;API;跨平台;linuxCircle CommunicationBased QT LAN cross-platform instant messaging software, designAnd Implementation Li YouchaoPro. Zhang Liang【Abstract】The circle of communi

8、cation is instant messaging tool for LAN, you can text chat, video calls and file transfer function. Design and implementation of this software is not completely sat for Thesis and useless software, its great practicality. First of all, this software captures the market linux practical LAN instant m

9、essaging tools, only a few network communication tools must be connected to the internet network, not connected to the extranet page can not be practical. Based on this, I thought to develop a software whose function is to allow Linux users to enjoy convenient high-speed LAN communication tool to th

10、eir learning and life convenience. The cross-platform features of the software also allows users on different platforms within the same LAN can be a barrier-free file transfers. In one fell swoop solve the dilemma of linux users and windows users have been each other in case there is no external net

11、work to transfer information and files. Use the entire software design and development of QT development tools take full advantage of cross-platform features of the QT library. At the same time on the Linux version of the software has achieved a video call functionality. The period also involves som

12、e knowledge of C language, or the camera drive V4l2 use. The main communication protocol used is TCP / IP TCPServer UdpSocket, of course, using the QT library using the API of the C language library. Fortunately, the QT development platform to provide users with rich API and development instance, mo

13、re convenient use of development.This paper will throughout the important functions of the software process, principle, code and related technologies to use to do a detailed discussion and interpretation.【Key words】LAN Instant Messaging;V4l 2;QT;TCP/IP ;UdpSocket;API;Cross-platform; 1 引言1.1 设计的目的及意义

14、即时通信软件是大家都比较熟悉的一种网络通信工具,而且网络上有很成熟的应用,比如腾讯QQ、飞信、飞鸽、飞秋等等。这些为我们的工作生活和学习交流带来了很大的方便。但是这些软件大都是只在Windows平台下才有,尤其是飞信、飞鸽、飞秋,只有Windows的版本,并没有Linux版本,而且QQ等其他工具在Windows和Linux互通时也极为的不方便,在最新版的Linux上QQ只能网页登陆。所以对于Linux用户来说市场上如果出现一款Linux系统下或者是跨平台的软件能够提供即时聊天、文件传输、视频通话等功能,这将大大的方便用户的生活工作和学习。该程序的设计的目的就是为Linux用户,还有跨平台的群组

15、用户提供一个实用的交流工具,实现局域网内部各个平台上用户的信息交流,文件传输等等。同时,由于本软件是面向局域网用户的,所以就省去了互联网通信软件复杂的登陆过程,简单的双击即可运行使用,并且不要求用户接入互联网就能运行使用,只要在一个局域网内即可进行通信,这也是局域网通信的一大优点。本软件主要有以下几大应用:1.跨平台的通信聊天。局域网内各个平台上的用户可使用本软件件进行方便的安全的聊天交流,并且还提供全网群组聊天功能,更加方便集体交流,为用户的学习、工作带来方便,从而提高用户的学习和作效率。2.跨平台的文件传输。本软件为用户提供了高速的文件传输功能,并且同时也可实现跨平台的高速文件传输,这是其

16、他即时通信工具所不具有的。解决了平时不同平台上的用户最为头疼的非得用U盘的存储介质来回的粘贴复制的窘境。极大的方便了用户。这恐怕也是局域网即时通讯软件最为常用的功能。跨平台的局域网高速文件传输也正是本软件的市场切入点,具有一定的市场前景。3.视频通话。本软件同时为Linux用户提供了视频通话的功能,从而为用户提供了更加有声有色的的交流方式,在局域网内使用语音聊天或许大部分时候都有些不合时宜。但是进行视频交流的话,无疑提高了用户之间的交流乐趣与效率,而且利用局域网网络通信高速、安全的特点,视频通话的优点体现的也就更加的淋漓尽致。本软件的设计的意义:本软件的设计的意义很明显,在就是为了方便用户的工

17、作和学习,同时本软件如果在Linux上发布,届时肯定为开源软件,也为广大的互联网用户提供一个良好的教材,同时也可以集合众多的互联网用户之力来完善本软件。1.2 开发背景随着网路的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要,人们可以通过这个空间进行网络聊天,实现彼此沟通,交换信息,甚至网络聊天工具在部分人的生活中由于传统的电话通讯手段同等重要的趋势。目前市场上的的即时通信工具虽然种类很多,且应用也比较成熟,但是这并不意味着这些软件对于市场的完全覆盖。目前市场上依然有着通信软件的盲区,在这几年的学习的应用中,我发现Linux系统上就没有一款比较好的局域网即时通信软件。局域网的即时通信

18、软件是以企业内部办公,建立员工交流平台为基础通过系统整合,边缘功能和实时协作的方案。由于企业对信息类软件的需求还在“探索”和“尝试”阶段,所以会导致很多系统不能互通,如Linux和Windows,这也成了局域网即时通信软件的一个使命。当信息软件被广泛使用之后,“互通”接口是否具备,将被作为软件选用的重要条件。本软件针对市场上的此类现象专门选用的QT跨平台开发环境使用跨平台的跨平台标准库,使得软件可以在不同的平台上编译运行,实现跨平台通信的目的,尤其是在传输文件的时候这种特性的优势将更加明显。2 开发技术简介2.1 开发工具简介Qt是一个跨平台的C+图形用户界面库,由挪威TrollTech公司出

19、品,目前包括Qt、基于FrameBuffer的Qtopia Core、快速开发工具Qt Designer和国际化工具Qt Linguist等部分。Qt支持所有的UNIX系统,当然也包括Linux系统,还支持WinNT/Win2k、Windows 95/98平台。基本上Qt同X-Window上的Motif、Openwin、GTK等图形界面库和Windows平台上的MFC、OWL、VCL、ATL是同类型的。不过Qt还具有下列一些优点:(1)优良的跨平台特性Qt支持下列操作系统:Microsoft Windows 95/98、Microsoft Windows NT、Linux、Solaris、Su

20、nOS、HP-UX、Digital UNIX (OSF/1、Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、OS390和QNX等。(2)面向对象Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。(3)丰富的APIQt包括多达250个以上的C+类,还提供基于模板的collections、serialization、file、I/O device、directory management和date/time类。甚至还

21、包括正则表达式的处理功能。(4)支持2D/3D图形渲染,支持OpenGL(5)大量的开发文档(6)XML支持但是真正使得Qt在自由软件界的众多Widgets(如Lesstif、Gtk、EZWGL、Xforms及fltk等)中脱颖而出的还是基于Qt的重量级软件KDE。Qt虽然是商业公司的产品,但是走的却是开源路线,提供免费下载,全部都是开放源代码,非商业用途亦采用GPL的版权宣告,著名的Open SourceKDE项目便是采用Qt开发的。Trolltech也针对嵌入式环境推出了Qt/Embedded产品。与桌面版本不同,Qt/Embedded已经直接取代了X Server及X Library等角

22、色,将所有的功能全部整合在一起。Qt/Embedded同样具有跨平台的特点,省掉了不少移植软件的功夫,这样的概念和Java十分接近。同时它还采用模块化设计,其最大的好处是有弹性,Qt/Embedded号称最小,可以缩到800 KB左右,最多可以长到3 MB(for Intel x86),这样的弹性也让Qt/Embedded更适合在嵌入式环境下生存。Qt/Embedded延续了Qt在X上的强大功能,在底层摒弃了X lib,仅采用FrameBuffer作为底层图形接口。同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、GPM鼠标、触摸屏及用户自定义的设备等。Qt/E

23、mbedded类库完全采用C+封装。丰富的控件资源和较好的可移植性是Qt/Embedded最为优秀的一方面。它的类库接口完全兼容于同版本的Qt-X11,使用X下的开发工具可以直接开发基于Qt/Embedded的应用程序QUI界面。与前两种GUI不同的是,Qt/Embedded的底层图形引擎只能采用FrameBuffer,这就注定了它是针对高端嵌入式图形领域的应用而设计的。由于该库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比较凌乱,各种补丁较多的问题。Qt/Embedded的结构也过于复杂和臃肿,很难进行底层的扩充、定制和移植,尤其是用来实现signal/slot机制的m

24、oc文件。Qt/Embedded当前已经升级为Qtopia Core和Qtopia Core,继承了Qt4的新技术,包括:高性能渲染引擎、模板容器类及基于行为的主窗口架构,改进的功能特点包括文本渲染与多线程技术。当编译Qtopia Core时,可以去除不用的功能,以最小化软件的占用空间。2.2 开发技术简介本软件的开发所使用的技术总的来说可以分为以下几大类:(1) 用来进行通信的部分,Tcp socket通信 和 QudpsocketTCP即Transmission Control Protocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的

25、数据无差错的发往网络上的其他计算机,所以当要传输大量数据时,我们选用TCP协议。TCP协议的程序使用的是客户端/服务器模式,在QT中,使用QTcpServer类建立服务器。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就会发出newConnection()信号,我们可以关联这个信号到我们自己的槽函数,进行相互之间套接字的建立。一旦有数据到来相应端的套接字就会发出readyRead()信号,我们可以关联此信号,进行数据的接收。其通信模型如图:Qudpsocket 则是一种面向无连接的的不可靠的数据传输技术,他可以不用tcp所需的连接,所以这种协议是尽最大努力的交付数据,这种协议在网络环

26、境较好的局域网内应用相当有价值。其通信模型如图:(2)信号和槽是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。在前几个例程中,我们已经连接了信号和槽,声明了控件自己的信号和槽,并实现了槽函数,发送了信号。槽和普通的c+成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的(protective),也可是私有的(private),它们可以象任何c+成员函数一样被调用,可以传递任何类型的参数。不同在于一个槽函数能和一个信号相连接,只要信号发出了,这个槽函数就会自动被调用。connect函数语法

27、如下: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)

28、,this, SLOT(updateStatusBarIndicator(int);当信号发出后,槽函数都会被调用,但是调用的顺序是随机的,不确定的。(二)多个信号可以连接到一个槽connect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();connect(calculator,SIGNAL(divisionByZero(),this,SLOT(handleMathError();任何一个信号发出,槽函数都会执行。(三)一个信号可以和另一个信号相连connect(lineEdit, SIGNAL(textChanged(const QStr

29、ing &),this, SIGNAL(updateRecord(const QString &);第一个信号发出后,第二个信号也同时发送。除此之外,信号与信号连接上和信号和槽连接相同。(四)连接可以被删除disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();这个函数很少使用,一个对象删除后,Qt自动删除这个对象的所有连接。信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接:connect(ftp,SIGNAL(rawCommandReply(int,constQString&),this, SLOT(proce

30、ssReply(int, const QString &);如果信号里的参数个数多于槽函数的参数,多余的参数被忽略:connect(ftp,SIGNAL(rawCommandReply(int, const QString&),this,SLOT(checkErrorCode(int);如果参速类型不匹配,或者信号和槽不存在,在debug状态时,Qt会在运行期间给出警告。如果信号和槽连接时包含了参数的名字,Qt将会给出警告。以前我们列举的例子中都是控件的信号和槽。但是信号和槽机制在 QObject中就实现了,可以实现在任何从QObject继承的子类中。(3)用于采集摄像头数据的V4l2驱动AP

31、I以及图像压缩技术V4L(Video for Linux )是Linux 内核中关于视频设备的子系统,它为linux 下的视频驱动提供了统一的接口,使得应用程序可以使用统一的API 函数操作不同的视频设备,极大地简化了视频系统的开发和维护。由于 V4L 有很多缺陷,Bill Dirks 等人对其进行了重新设计,并取名为Video for LinuxTwo(V4L2),最早出现于Linux2.5.x 版本。V4L2 相比于V4L 有更好的扩展性和灵活性,并且支持的硬件设备更多。但是需要注意的是,V4L2 对V4L 进行了彻底的改造,因而两者并不兼容。Linux 系统中,所有的外部设备都被看成一种

32、特殊的文件,称之为设备文件。应用程序可以通过访问这些特殊文件实现对应设备的控制。V4L2 视频设备的设备文件为/dev 目录下的videoN(N 为063)文件,其主设备号为81,次设备号为N(N 为063)。在v4l2中有主要的技术参数如下: VIDIOC_REQBUFS:分配内存VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存换成物理地址VIDIOC_QUERYCAP:查询驱动功能VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式 VIDIOC_S_FMT:设置当前驱动的频捕获格式VIDIOC_G_FMT:读取当前驱动的频捕获格式VIDIOC_TRY_

33、FMT:验证当前驱动的显示格式VIDIOC_CROPCAP:查询驱动的修剪能力VIDIOC_S_CROP:设置视频信号的边框VIDIOC_G_CROP:读取视频信号的边框VIDIOC_QBUF:把数据从缓存中读取出来VIDIOC_DQBUF:把数据放回缓存队列VIDIOC_STREAMON:开始视频显示函数VIDIOC_STREAMOFF:结束视频显示函数VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC(有些是必须的有些是可选择的)。结构体:struct v4l2_requestbuffers reqbufs;/向驱动申请帧缓冲的请求,里包含申请的个数struc

34、t v4l2_capability cap;/这个设备的功能,比如是否是视频输入备struct v4l2_input input; /视频输入struct v4l2_standard std;/视频的制式,比如PAL,NTSCstruct v4l2_format fmt;/帧的格式,比如宽度,高度等struct v4l2_buffer buf;/代表驱动中的一帧v4l2_std_id stdid;/视频制式,例如:V4L2_STD_PAL_Bstruct v4l2_queryctrl query;/查询的控制struct v4l2_control control;/具体控制的值(4) 用于控制

35、与多人视频的thread 和Qthread多线程技术 多线程技术对于我们来说不应该陌生,这种技术不仅节约存储空间,提高程序的运行效率。并且可以实现很多实用的功能。(5)用于控制界面显示的QtGui库内容 QtGui是一个非常强大的编程库同时它也是QT中所有类的父类,它为用户提供了丰富的API和各种实例,这些在前面开发工具基本已经介绍,此处不再赘述。3 需求分析3.1 功能需求分析3.1.1 群聊功能局域网内所有用户都可在聊天室内发送消息,并且接收其他用户发往聊天室的消息,理论上用户可以看到程序运行后所有发往聊天室的消息。3.1.2 私聊功能一个完整的聊天软件定然是缺少不了私聊功能的,软件还提供

36、私聊功能用户双击用户列表上响应的用户后即可打开与之对应的聊天窗口并且可以与之进行任意的聊天。当然用户可以同时与多人进行私聊而不会发生干扰。3.1.3 聊天字体设置为了使用户的文字更加的生动和个性化,用户可以通过面板上的各种控件来修改文字、大小和颜色。发送到对方的聊天窗口时这些文字依然要按照发送者的设置显示。3.1.4 聊天记录功能软件会自动的记录用户的所有聊天内容并保存在本地的文件中,包括群聊和私聊内容。当用户点击聊天记录按钮时还可以将对应的聊天记录显示在扩展出来的聊天记录显示框内。而且比较重要的一点是,在保存聊天记录是时候会将文字的格式一并保存,并且可以按照原来的格式显示。用户还可以主动的将

37、信息显示窗口内的内容自行的保存到自己想要保存的文件中去。3.1.5 文件传送功能当用户需要传送文件时只需要点击与之对应的聊天框,或者选择群聊天室用户列表对应的用户后,点击文件传送按钮即可选择文件然后进行高效的文件传输了,高效简便。3.1.6 维护在线用户列表在线用户列表只显示局域网内已经运行软件的用户的信息。其他的则不做显示,当有用户加入时,用户列表就自动的在底一行加入新来的用户信息,其他用户的信息一次后移。当有用户退出时列表将其信息删除,然后后边的用户一次向前移动一行。3.1.7 修改昵称软件允许用户修改自己的显示名称。程序运行最初时,列表上显示的是用户的系统用户名。用户可点击,自己的名称进

38、行编辑修改。修改完后向全网实时更新。名称的修改可以保存下次运行时就显示本次修改后的名称。以上功能都是可以跨平台实现的也就是说同样的代码可以在多种操作系统上编译生成可执行程序,然后发布运行。也就是说同一款软件可以跨平台进行信息交流和文件传输。3.1.8 视频通话由于时间与目前所获得的知识的关系,系统目前只能为linux用户提供了视频通话的功能。在linux下用户可以与私聊的对方进行生动有趣的视频通话功能。3.2 数据需求分析3.2.1文字信息用户的个人信息和聊天内容信息由于都是文字信息,其特点是占用的存储空间小,类型一致,比较方便使用,所以这些信息都用QT中的字符串类QString表示。传输这些

39、数据的时候用的则是数据流的形式传送的。3.2.2文件信息进行文件传送的时候,很明显数据是块数据而且数据量非常的大,这里将用文件分成一个个的块block送入流QDataStream中进行传送。3.2.3视频信息视频信息可以分成单幅的图片传送,这里我又用到了另一种语言,并且用到了缓冲区的概念。3.3 技术需求分析网络通信技术TCP/IP 、socket技术在网络通信中定然是不可缺少了。这里所使用的将是QT中的socket和tcp技术,还有部分功能将使用c语言中的socket技术。界面设计技术,这里的界面设计绝大部分将用QT Designer设计完成。少部分界面由于需要自行定义,故用代码实现。视频采

40、集技术,在linux下将使用v4l2作为主要的视频采集技术。3.4 性能需求分析既然是即时通讯工具,所以高速的信息传输和响应是必不可少的,由于所处的环境是局域网,所以足以满足要求。对于视频和文件的传输则要求视频能够达到流畅的显示,文件的传输速度单位应该是MB/s。3.4 编写环境需求分析程序的全部过程将全部在linux下编写完成,并且到达可运行的地步。中间可能会在windows系统上做少许的实验和修改。4 软件设计与代码分析4.1 软件结构设计局域网聊天软件和网络版的聊天软件虽然同为即时工具,但是仍然有许多的不公之处,通常的网络即时通讯工具如腾讯qq需要有一个登录的过程,用户的客户端只要在连接

41、网络的情况下,才能登录服务器,所以qq是一种c/s结构的软件。而我要设计实现的局域网即时通讯工具明显不需要服务器端和登录过程。打开软件即可显示在线用户列表,在局域网内也不需要专门的服务器。所以这种结构是一种客户端直接到客户端的通信,即P to P结构的软件。这样方便了用户的操作,增加了程序的易用性。程序的主要功能模块儿设计如下:4.1.1 在线用户列表显示以及维护模块。 4.1.2私聊信息输入发送与显示模块。4.1.3 聊天室信息输入发送以及显示模块。4.1.4 信息接收分发处理模块。4.1.5 文件传输模块。4.1.6 聊天记录模块。4.1.7 视频采集传输模块。4.1.8 视频显示模块。软

42、件结构图如图4.1:图4.1软件结构图4.2 各模块功能流程图及联系整个软件的各个主要的模块已经在上节简单的进行了罗列,但是他们之间并不是简简单单的的并列或者包含的关系。下面就各模块的具体实现和模块之间的详细调用关系设计进行详细的介绍。4.2.1用户列表窗口上的模块及详细功能用户列表的最直观的功能是显示在线用户的列表,维护用户列表,但是在后台用户列表还有程序中极为重要的功能:(1)接收来自其他用户的消息(2)将用户的消息分类并发往对应的聊天窗口内(3)提供文件发送的服务端和客户端,当本地用户发送文件时,用户列表在后台提供文件发送服务;当接收文件时用户列表又启动文间接收的实例,作为文件传送的服务

43、端。(4)视频的聊天的服务端。当与别人视频通话时,用户列表就会启动视频采集服务端的程序并等待其他用户的连接。(5)用户列表还提供了修改昵称的小功能,方便用户的个性化交流。用户列表的工作流程图如图4.2:图4.2 用户列表工作流程图4.2.2私聊窗口上的模块及详细功能私聊窗口的上的主要功能是:(1)输入并发送信息。(2)改变输入信息字体格式。(3)显示私聊信息。(4)显示历史聊天记录(5)发送文件传输请求。(6)发送视频通话请求。(7)作为视频客户端显示对方传来的视频信息。(8)自动和手动保存聊天记录。(自动保存聊天记录的时候会将聊天记录字体的格式等信息一同记录,并且能够再客户端完全还原)私聊窗

44、口的工作流程图如图4.3 (17页):4.2.3聊天室窗口上的模块及详细功能聊天室窗口主要负责群聊信息的发送和显示,同时群聊窗口提供了显示用户列表和群聊消息历史记录的功能。功能罗列如下:(1)输入并发送信息。(此处的发送与私聊发送略有不同,此处的socke是以广播的形式发送到全网的)(2)改变输入信息字体格式。(3)显示群聊信息。(4)显示历史聊天记录(5)通过选择用户发送文件传输请求。(6)自动和手动保存聊天记录。(自动保存聊天记录的时候会将聊天记录字体的格式等信息一同记录,并且能够再客户端完全还原)聊天室窗口的工作流程图如图4.4(18页):图4.3 私聊窗口流程图图4.4聊天室窗口流程图

45、4.2.4文件传送服务端的功能及流程文件传送服务端由用户列表唯一实例化,可以作为参数传递给私聊窗口和聊天室窗口。当用户列表接收到打开文件服务器的信号后,就根据信号的参数激发对应的槽函数初始化文件服务器,并打开文件选择对话框进行要传送的文件选择,文件选择完成后用户方可选择发送,发送一个文件信息,并等待对方连接到服务器文件发送所使用的通信协议是有连接的TCP协议,不同于发送消息的udp协议。发送完成后关闭对话框并显示系统提示信息。文件服务器工作流程图如图4.5图4.4 文件服务器窗口流程图4.2.5文件传送客户端的功能及流程文件传送的客户端相对来说功能就相对的简单了,文件接收端和客户端一样也是由用

46、户列表实例化一个对象,当然为了避免端口重用的麻烦,本程序只提供了一个客户端实例,也就是说同一时刻只能允许一个文件的接收与发送。当用户同意接收文件后,用户列表就启动客户端连接对方的文件服务器,自动的开始文件的传送。文件传送的过程中用户可以选择最小化界面。传送完成后窗口关闭,系统发出提示信息。文件客户端工作流程图如图4.5图4.5 文件客户端窗口流程图4.2.5视频通话服务端的功能及流程视频通话功能是程序中比较特别的一个模块。由于采集摄像头的视频需要与底层的驱动程序打交道,而在不同的平台上驱动程序是不同的。也就是说在不同的平台上编写的视频采集程序是不能够通用的。所以视频模块的功能不能与其他部分代码联系的太过紧密。这样可以避免在不同平台上修改同样代码的麻烦,而就目前来说,我只掌握了在linux上的视频驱动程序的V4L2(Video For Linux Tw

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号