基于QT的局域网跨平台即时通信软件 毕业论文.doc_第1页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第2页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第3页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第4页
基于QT的局域网跨平台即时通信软件 毕业论文.doc_第5页
免费预览已结束,剩余51页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

. . 装 订 线 . . . 山 东 农 业 大 学 毕 业 论 文 题目: 圈圈通信 基于 qt 的局域网跨平台即时通信软件 院 部 信息科学与工程学院 专业班级 * 届 次 2012 届 学生姓名 * 学 号 * 指导教师 * 二 一 二 年 五 月 二十三 日 圈圈通信 基于 qt 的局域网跨平台即时通信软件的 设计与实现 circle communication based qt lan cross-platform instant messaging software design and implementation 专业 speciality 网络工程 network engineering 学生 undergraduate 指导教师 supervisor 山东农业大学 二一 二 年六月 shandong agricultural university june, 2012 目 录 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 1 introduction 1 1.1 the purpose and significance of design 1 1.2 background of development 2 2 development of technical brief .3 2.1 development tool profile.3 2.2 development of technical brief 4 3 demand analysis .10 3.1 functional requirements analysis10 3.2 analysis of data needs 11 3.3 technical requirement analysis 12 3.4 performance needs analysis 12 3.4 authoring environment needs analysis.12 4 software design and code analysis.13 4.1 software architecture design .13 4.2 functions of each module flowchart and contact.14 4.3 the specific design of each module and code implementation.23 5 software testing 38 5.1 module testing .38 5.2 functional testing.38 5.3 test results .39 6 conclusion .47 references .48 acknowledgements .49 圈圈通信 基于 qt 的局域网即时通信软件的设计与实现 * * * * 【摘要】圈圈通信是面向局域网的即时通讯工具,可以实现文本聊天,视频通话文件传输等功 能。本软件的设计与实现也并不是完全为了毕业论文而做的无用软件,其本身也有很大的实用 性。首先本软件抓住了市场上没有 linux 实用的的局域网即时通讯工具,仅有的几个网络通讯 工具还必须连接 internet 网络,在没有连接外网的情况下无法使用。基于此我想到了开发一套 这样的软件,功能是允许 linux 用户享受到高速便捷的局域网通信工具给他们的学习和生活带 来的便利。软件的跨平台特性也使得同局域网内的不同平台的用户可以进行无障碍的信息文件 的传输。解决了一直以来 linux 用户和 windows 用户在没有外网的情况下相互传输信息和文件 的窘境。整套软件使用 qt 开发工具设计开发,充分的利用了 qt 库的跨平台特性。同时在 linux 版本的软件上已经实现了视频通话的功能。期间还涉及到了部分 c 语言的知识,还有摄 像头驱动 v4l2 的使用。用到的主要通信协议是 tcp/ip 中的 tcpserver udpsocket,当然其中 有采用 qt 库的也有采用 c 语言库的相应的 api。在 qt 开发平台为用户提供了丰富的 api 和 开发实例,方便了开发者的使用。 本论文将对软件的各处重要的功能流程、实现原理、代码实现和使用到的相关技术做详细的论 述和解释。 【关键词】局域网即时通讯;v4l2;qt;tcp/ip ;udpsocket;api;跨平台;linux circle communication based qt lan cross-platform instant messaging software, design and implementation li youchao pro. zhang liang 【abstract】the circle of communication 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 messaging 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 their 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 network 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 some 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, more 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.1 设计的目的及意义 即时通信软件是大家都比较熟悉的一种网络通信工具,而且网络上有很成熟的 应用,比如腾讯 qq、飞信、飞鸽、飞秋等等。这些为我们的工作生活和学习交流 带来了很大的方便。但是这些软件大都是只在 windows 平台下才有,尤其是飞信、 飞鸽、飞秋,只有 windows 的版本,并没有 linux 版本,而且 qq 等其他工具在 windows 和 linux 互通时也极为的不方便,在最新版的 linux 上 qq 只能网页登陆。 所以对于 linux 用户来说市场上如果出现一款 linux 系统下或者是跨平台的软件 能够提供即时聊天、文件传输、视频通话等功能,这将大大的方便用户的生活工 作和学习。 该程序的设计的目的就是为 linux 用户,还有跨平台的群组用户提供一个实用 的交流工具,实现局域网内部各个平台上用户的信息交流,文件传输等等。同时, 由于本软件是面向局域网用户的,所以就省去了互联网通信软件复杂的登陆过程, 简单的双击即可运行使用,并且不要求用户接入互联网就能运行使用,只要在一 个局域网内即可进行通信,这也是局域网通信的一大优点。本软件主要有以下几 大应用: 1.跨平台的通信聊天。局域网内各个平台上的用户可使用本软件件进行方 便的安全的聊天交流,并且还提供全网群组聊天功能,更加方便集体交流,为用 户的学习、工作带来方便,从而提高用户的学习和作效率。 2.跨平台的文件传输。本软件为用户提供了高速的文件传输功能,并且同 时也可实现跨平台的高速文件传输,这是其他即时通信工具所不具有的。解决了 平时不同平台上的用户最为头疼的非得用 u 盘的存储介质来回的粘贴复制的窘境。 极大的方便了用户。这恐怕也是局域网即时通讯软件最为常用的功能。跨平台的 局域网高速文件传输也正是本软件的市场切入点,具有一定的市场前景。 3.视频通话。本软件同时为 linux 用户提供了视频通话的功能,从而为用 户提供了更加有声有色的的交流方式,在局域网内使用语音聊天或许大部分时候 都有些不合时宜。但是进行视频交流的话,无疑提高了用户之间的交流乐趣与效 率,而且利用局域网网络通信高速、安全的特点,视频通话的优点体现的也就更 加的淋漓尽致。 本软件的设计的意义:本软件的设计的意义很明显,在就是为了方便用户的 工作和学习,同时本软件如果在 linux 上发布,届时肯定为开源软件,也为广大 的互联网用户提供一个良好的教材,同时也可以集合众多的互联网用户之力来完 山东农业大学学士学位论文 2 善本软件。 1.2 开发背景 随着网路的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要, 人们可以通过这个空间进行网络聊天,实现彼此沟通,交换信息,甚至网络聊天 工具在部分人的生活中由于传统的电话通讯手段同等重要的趋势。 目前市场上的的即时通信工具虽然种类很多,且应用也比较成熟,但是这并 不意味着这些软件对于市场的完全覆盖。目前市场上依然有着通信软件的盲区, 在这几年的学习的应用中,我发现 linux 系统上就没有一款比较好的局域网即时 通信软件。局域网的即时通信软件是以企业内部办公,建立员工交流平台为基础 通过系统整合,边缘功能和实时协作的方案。由于企业对信息类软件的需求还在 “探索”和“尝试”阶段,所以会导致很多系统不能互通,如 linux 和 windows, 这也成了局域网即时通信软件的一个使命。当信息软件被广泛使用之后,“互通” 接口是否具备,将被作为软件选用的重要条件。 本软件针对市场上的此类现象专门选用的 qt 跨平台开发环境使用跨平台的跨 平台标准库,使得软件可以在不同的平台上编译运行,实现跨平台通信的目的, 尤其是在传输文件的时候这种特性的优势将更加明显。 山东农业大学学士学位论文 3 2 开发技术简介 2.1 开发工具简介 qt 是一个跨平台的 c+图形用户界面库,由挪威 trolltech 公司出品,目前 包括 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、sunos、hp-ux、digital unix (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/o device、directory management 和 date/time 类。甚至还包括正则表达式的处理功能。 (4)支持 2d/3d 图形渲染,支持 opengl (5)大量的开发文档 (6)xml 支持 但是真正使得 qt 在自由软件界的众多 widgets(如 lesstif、gtk、ezwgl、xforms 及 fltk 等)中脱颖而出的还是基于 qt 的重量级软 件 kde。qt 虽然是商业公司的产品,但是走的却是开源路线,提供免费下载,全 部都是开放源代码,非商业用途亦采用 gpl 的版权宣告,著名的 open source“kde“项目便是采用 qt 开发的。 trolltech 也针对嵌入式环境推出了 qt/embedded 产品。与桌面版本不同, qt/embedded 已经直接取代了 x server 及 x library 等角色,将所有的功能全部 山东农业大学学士学位论文 4 整合在一起。 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/embedded 类库完全采用 c+封装。丰富的控件资源和较好的可移植性是 qt/embedded 最为优秀的一方面。它的类库接口完全兼容于同版本的 qt-x11,使 用 x 下的开发工具可以直接开发基于 qt/embedded 的应用程序 qui 界面。 与前两种 gui 不同的是,qt/embedded 的底层图形引擎只能采用 framebuffer,这就注定了它是针对高端嵌入式图形领域的应用而设计的。由于该 库的代码追求面面俱到,以增加它对多种硬件设备的支持,造成了其底层代码比 较凌乱,各种补丁较多的问题。qt/embedded 的结构也过于复杂和臃肿,很难进行 底层的扩充、定制和移植,尤其是用来实现 signal/slot 机制的 moc 文件。 qt/embedded 当前已经升级为 qtopia core 和 qtopia core,继承了 qt4 的新 技术,包括:高性能渲染引擎、模板容器类及基于行为的主窗口架构,改进的功 能特点包括文本渲染与多线程技术。当编译 qtopia core 时,可以去除不用的功 能,以最小化软件的占用空间。 2.2 开发技术简介 本软件的开发所使用的技术总的来说可以分为以下几大类: (1) 用来进行通信的部分,tcp socket 通信 和 qudpsocket tcp 即 transmission control protocol,传输控制协议。与 udp 不同,它是面向连 接和数据流的可靠传输协议。也就是说,它能使一台计算机上的数据无差错的发 往网络上的其他计算机,所以当要传输大量数据时,我们选用 tcp 协议。 tcp 协议的程序使用的是客户端/服务器模式,在 qt 中,使用 qtcpserver 类 建立服务器。我们在服务器端进行端口的监听,一旦发现客户端的连接请求,就 会发出 newconnection()信号,我们可以关联这个信号到我们自己的槽函数,进行 相互之间套接字的建立。一旦有数据到来相应端的套接字就会发出 readyread()信 号,我们可以关联此信号,进行数据的接收。 其通信模型如图: 山东农业大学学士学位论文 5 qudpsocket 则是一种面向无连接的的不可靠的数据传输技术,他可以不用 tcp 所需的连接,所以这种协议是尽最大努力的交付数据,这种协议在网络环境较好 的局域网内应用相当有价值。其通信模型如图: 山东农业大学学士学位论文 6 (2)信号和槽是 qt 编程的一个重要部分。 这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。 在前几个例程中,我们已经连接了信号和槽,声明了控件自己的信号和槽, 并实现了槽函数,发送了信号。 槽和普通的 c+成员函数很像。它们可以是虚函数(virtual) ,也可被重 载(overload ) ,可以是公有的(public) ,保护的( protective) ,也可是私有 的(private) ,它们可以象任何 c+成员函数一样被调用,可以传递任何类 型的参数。不同在于一个槽函数能和一个信号相连接,只要信号发出了, 这个槽函数就会自动被调用。 connect 函数语法如下: connect(sender, signal(signal), receiver, slot(slot); sender 和 receiver 是 qobject 对象指针,signal 和 slot 是不带参数的函数原 型。signale()和 slot()宏的作用是把他们转换成字符串。 山东农业大学学士学位论文 7 在目前有的例子中,我们已经连接了不同的信号和槽。实际使用中还要 考虑入戏一些规则: (一)一个信号可以连接到多个槽: 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(const qstring 这个函数很少使用,一个对象删除后,qt 自动删除这个对象的所有连接。 信号和槽函数必须有着相同的参数类型,这样信号和槽函数才能成功连接: connect(ftp,signal(rawcommandreply(int,constqstring 如果信号里的参数个数多于槽函数的参数,多余的参数被忽略: connect(ftp,signal(rawcommandreply(int, const qstring 如果参速类型不匹配,或者信号和槽不存在,在 debug 状态时,qt 会 在运行期间给出警告。如果信号和槽连接时包含了参数的名字,qt 将会给 出警告。 以前我们列举的例子中都是控件的信号和槽。但是信号和槽机制在 qobject 中 就实现了,可以实现在任何从 qobject 继承的子类中。 (3)用于采集摄像头数据的 v4l2 驱动 api 以及图像压缩技术 v4l(video for linux )是 linux 内核中关于视频设备的子系统,它为 linux 下 的视频驱动提供了统一的接口,使得应用程序可以使用统一的 api 函数操作不同 山东农业大学学士学位论文 8 的视频设备,极大地简化了视频系统的开发和维护。 由于 v4l 有很多缺陷,bill dirks 等人对其进行了重新设计,并取名为 video for linuxtwo(v4l2),最早出现于 linux2.5.x 版本。 v4l2 相比于 v4l 有更好的扩展 性和灵活性,并且支持的硬件设备更多。但是需要注意的是,v4l2 对 v4l 进行 了彻底的改造,因而两者并不兼容。 linux 系统中,所有的外部设备都被看成一种特殊的文件,称之为设备文件。 应用程序可以通过访问这些特殊文件实现对应设备的控制。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_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;/向驱动申请帧缓冲的请求,里 包含申请的个数 struct v4l2_capability cap;/这个设备的功能,比如是否是视频输入 备 struct v4l2_input input; /视频输入 struct v4l2_standard std;/视频的制式,比如 pal, ntsc struct v4l2_format fmt;/帧的格式,比如宽度,高度等 山东农业大学学士学位论文 9 struct v4l2_buffer buf;/代表驱动中的一帧 v4l2_std_id stdid;/视频制式,例如:v4l2_std_pal_b struct v4l2_queryctrl query;/查询的控制 struct v4l2_control control;/具体控制的值 (4)用于控制与多人视频的 thread 和 qthread 多线程技术 多线程技术对于我们来说不应该陌生,这种技术不仅节约存储空间,提高程 序的运行效率。并且可以实现很多实用的功能。 (5)用于控制界面显示的 qtgui 库内容 qtgui 是一个非常强大的编程库同时它也是 qt 中所有类的父类,它为用户提 供了丰富的 api 和各种实例,这些在前面开发工具基本已经介绍,此处不再赘述。 山东农业大学学士学位论文 10 3 需求分析 3.1 功能需求分析 3.1.1 群聊功能 局域网内所有用户都可在聊天室内发送消息,并且接收其他用户发往聊天室的 消息,理论上用户可以看到程序运行后所有发往聊天室的消息。 3.1.2 私聊功能 一个完整的聊天软件定然是缺少不了私聊功能的,软件还提供私聊功能用户 双击用户列表上响应的用户后即可打开与之对应的聊天窗口并且可以与之进行任 意的聊天。当然用户可以同时与多人进行私聊而不会发生干扰。 3.1.3 聊天字体设置 为了使用户的文字更加的生动和个性化,用户可以通过面板上的各种控件来修 改文字、大小和颜色。发送到对方的聊天窗口时这些文字依然要按照发送者的设 置显示。 3.1.4 聊天记录功能 软件会自动的记录用户的所有聊天内容并保存在本地的文件中,包括群聊和 私聊内容。当用户点击聊天记录按钮时还可以将对应的聊天记录显示在扩展出来 的聊天记录显示框内。而且比较重要的一点是,在保存聊天记录是时候会将文字 的格式一并保存,并且可以按照原来的格式显示。用户还可以主动的将信息显示 窗口内的内容自行的保存到自己想要保存的文件中去。 3.1.5 文件传送功能 当用户需要传送文件时只需要点击与之对应的聊天框,或者选择群聊天室用 户列表对应的用户后,点击文件传送按钮即可选择文件然后进行高效的文件传输 了,高效简便。 3.1.6 维护在线用户列表 在线用户列表只显示局域网内已经运行软件的用户的信息。其他的则不做显 示,当有用户加入时,用户列表就自动的在底一行加入新来的用户信息,其他用 户的信息一次后移。当有用户退出时列表将其信息删除,然后后边的用户一次向 前移动一行。 山东农业大学学士学位论文 11 3.1.7 修改昵称 软件允许用户修改自己的显示名称。程序运行最初时,列表上显示的是用户 的系统用户名。用户可点击,自己的名称进行编辑修改。修改完后向全网实时更 新。名称的修改可以保存下次运行时就显示本次修改后的名称。 以上功能都是可以跨平台实现的也就是说同样的代码可以在多种操作系统上 编译生成可执行程序,然后发布运行。也就是说同一款软件可以跨平台进行信息 交流和文件传输。 3.1.8 视频通话 由于时间与目前所获得的知识的关系,系统目前只能为 linux 用户提供了视频通话 的功能。在 linux 下用户可以与私聊的对方进行生动有趣的视频通话功能。 3.2 数据需求分析 3.2.1 文字信息 用户的个人信息和聊天内容信息由于都是文字信息,其特点是占用的存储空 间小,类型一致,比较方便使用,所以这些信息都用 qt 中的字符串类 qstring 表 示。传输这些数据的时候用的则是数据流的形式传送的。 3.2.2 文件信息 进行文件传送的时候,很明显数据是块数据而且数据量非常的大,这里将用 文件分成一个个的块 block 送入流 qdatastream 中进行传送。 3.2.3 视频信息 视频信息可以分成单幅的图片传送,这里我又用到了另一种语言,并且用到 了缓冲区的概念。 3.3 技术需求分析 网络通信技术 tcp/ip 、socket 技术在网络通信中定然是不可缺少了。这里 所使用的将是 qt 中的 socket 和 tcp 技术,还有部分功能将使用 c 语言中的 socket 技术。 界面设计技术,这里的界面设计绝大部分将用 qt designer 设计完成。少部 分界面由于需要自行定义,故用代码实现。 视频采集技术,在 linux 下将使用 v4l2 作为主要的视频采集技术。 山东农业大学学士学位论文 12 3.4 性能需求分析 既然是即时通讯工具,所以高速的信息传输和响应是必不可少的,由于所处 的环境是局域网,所以足以满足要求。 对于视频和文件的传输则要求视频能够达到流畅的显示,文件的传输速度单位 应该是 mb/s。 3.4 编写环境需求分析 程序的全部过程将全部在 linux 下编写完成,并且到达可运行的地步。中间可 能会在 windows 系统上做少许的实验和修改。 山东农业大学学士学位论文 13 4 软件设计与代码分析 4.1 软件结构设计 局域网聊天软件和网络版的聊天软件虽然同为即时工具,但是仍然有许多的 不公之处,通常的网络即时通讯工具如腾讯 qq 需要有一个登录的过程,用户的客 户端只要在连接网络的情况下,才能登录服务器,所以 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 视频显示模块。 软件结构图如图 4.1: 山东农业大学学士学位论文 14 图 4.1 软件结构图 4.2 各模块功能流程图及联系 整个软件的各个主要的模块已经在上节简单的进行了罗列,但是他们之间并 不是简简单单的的并列或者包含的关系。下面就各模块的具体实现和模块之间的 详细调用关系设计进行详细的介绍。 4.2.1 用户列表窗口上的模块及详细功能 用户列表的最直观的功能是显示在线用户的列表,维护用户列表,但是在后 台用户列表还有程序中极为重要的功能:(1)接收来自其他用户的消息(2)将 用户的消息分类并发往对应的聊天窗口内(3)提供文件发送的服务端和客户端, 当本地用户发送文件时,用户列表在后台提供文件发送服务;当接收文件时用户 列表又启动文间接收的实例,作为文件传送的服务端。 (4)视频的聊天的服务端。 当与别人视频通话时,用户列表就会启动视频采集服务端的程序并等待其他用户 再 选 定 此 处 并 键 入 附 加 文 本圈 圈 局 域 网 聊 天 再 选 定 此处 并 键 入附 加 文 本 用户列表窗口 再 选 定 此处 并 键 入附 加 文 本私聊窗口 再 选 定 此处 并 键 入附 加 文 本 聊天室窗口 再 选 定 此处 并 键 入附 加 文 本 文件传输服务端 再 选 定 此处 并 键 入附 加 文 本 视频通话服务端 再 选 定 此处 并 键 入附 加 文 本 视频通话客户端 再 选 定 此处 并 键 入附 加 文 本 聊天记录模块 再 选 定 此处 并 键 入附 加 文 本 文件传输客户端 再 选 定 此处 并 键 入附 加 文 本 消息接收与处理模块 再 选 定 此处 并 键 入附 加 文 本 消息输入与发送模块 再 选 定 此处 并 键 入附 加 文 本 信息显示模块 山东农业大学学士学位论文 15 的连接。 (5)用户列表还提供了修改昵称的小功能,方便用户的个性化交流。 用户列表的工作流程图如图 4.2: 开始 获取本地信息 广播上线信息 启动 s o c k e t 监 听网络信息 有网络消息 消 息 分 类 y n 新 上 线 用 户 用 户 下 线 聊 天 室 消 息 私 聊 消 息 文 件 消 息 在 用 户 列 表 中 加 入 一 行 从 用 户 列 表 中 删 除 对 应 行 调 用 聊 天 室 响 应 函 数 消 息 分 配 对 应 窗 口 打 开 信 息 交 给 对 应 窗 口 y 显 示 新 消 息 提 示 窗 口 n 同 意 接 收 打 开 接 收 文 件 客 户 端 开 始 接 收 y 发 送 拒 绝 信 息 视 频 请 求 文 件 接 收 拒 绝 视 频 请 求 拒 绝 目 标 窗 口 打 开 交 给 目 标 窗 口 信 息 y 打 开 视 频 请 求 对 话 框 n 交 给 文 件 服 务 端 交 给 对 应 聊 天 窗 口 监 听 程 序 内 部 的 各 种 信 号 摄 像 头 打 开 私 聊 窗 口 关 闭 摄 像 头 关 闭 打 开 文 件 发 送 服 务 器 更 新 私 聊 窗 口 数 组 调 用 摄 像 头 打 开 处 理 函 数 调 用 关 闭 摄 像 头 处 理 函 数 调 用 文 件 服 务 器 山东农业大学学士学位论文 16 图 4.2 用户列表工作流程图 4.2.2 私聊窗口上的模块及详细功能 私聊窗口的上的主要功能是:(1)输入并发送信息。 (2)改变输入信息字体 格式。 (3)显示私聊信息。 (4)显示历史聊天记录(5)发送文件传输请求。 (6) 发送视频通话请求。 (7)作为视频客户端显示对方传来的视频信息。 (8)自动和 手动保存聊天记录。 (自动保存聊天记录的时候会将聊天记录字体的格式等信息一 同记录,并且能够再客户端完全还原) 私聊窗口的工作流程图如图 4.3 (17 页): 4.2.3 聊天室窗口上的模块及详细功能 聊天室窗口主要负责群聊信息的发送和显示,同时群聊窗口提供了显示用户 列表和群聊消息历史记录的功能。 功能罗列如下:(1)输入并发送信息。 (此处的发送与私聊发送略有不同,此处 的 socke 是以广播的形式发送到全网的) (2)改变输入信息字体格式。 (3)显示 群聊信息。 (4)显示历史聊天记录(5)通过选择用户发送文件传输请求。 (6)自 动和手动保存聊天记录。 (自动保存聊天记录的时候会将聊天记录字体的格式等信 息一同记录,并且能够再客户端完全还原) 聊天室窗口的工作流程图如图 4.4(18 页): 山东农业大学学士学位论文 17 图 4.3 私聊窗口流程图 山东农业大学学士学位论文 18 显 示 群 消 息 输 入 并 发 送 聊 天 信 息 输 入 信 息 不 为 空 交 给 s o c k e t 广 播 发 送 y 点 击 发 送 文 件 按 钮 是 否 已 选 择 目 标 用 户 发 送 打 开 文 件 服 务 器 信 号 y 提 示 用 户 消 息 为 空 不 能 发 送 n 提 示 用 户 选 择 目 标 用 户 n 点 击 历 史 记 录 按 钮 开 始 扩 展 出 历 史 记 录 面 板 读 取 历 史 记 录 文 件 并 显 示 在 面 板 上 同 时 隐 藏 用 户 列 表 面 板 点 击 用 户 列 表 按 钮 用 户 列 表 已 打 开 关 闭 用 户 列 表 打 开 用 户 列 表 y n 点 击 保 存 历 史 记 录 按 钮 显 示 信 息 面 板 不 空 打 开 保 存 文 件 对 话 框 y 提 示 用 户 消 息 面 板 为 空 n 图 4.4 聊天室窗口流程图 山东农业大学学士学位论文 19 4.2.4 文件传送服务端的功能及流程 文件传送服务端由用户列表唯一实例化,可以作为参数传递给私聊窗口和聊天 室窗口。当用户列表接收到打开文件服务器的信号后,就根据信号的参数激发对 应的槽函数初始化文件服务器,并打开文件选择对话框进行要传送的文件选择, 文件选择完成后用户方可选择发送,发送一个文件信息,并等待对方连接到服务 器文件发送所使用的通信协议是有连接的 tcp 协议,不同于发送消息的 udp 协议。 发送完成后关闭对话框并显示系统提示信息。 文件服务器工作流程图如图 4.5 图 4.4 文件服务器窗口流程图 4.2.5 文件传送客户端的功能及流程 文件传送的客户端相对来说功能就相对的简单了,文件接收端和客户端一样也 是由用户列表实例化一个对象,当然为了避免端口重用的麻烦,本程序只提供了 一个客户端实例,也就是说同一时刻只能允许一个文件的接收与发送。当用户同 意接收文件后,用户列表就启动客户端连接对方的文件服务器,自动的开始文件 山东农业大学学士学位论文 20 的传送。文件传送的过程中用户可以选择最小化界面。传送完成后窗口关闭,系 统发出提示信息。 文件客户端工作流程图如图 4.5 图 4.5 文件客户端窗口流程图 4.2.5 视频通话服务端的功能及流程 视频通话功能是程序中比较特别的一个模块。由于采集摄像头的视频需要与 底层的驱动程序打交道,而在不同的平台上驱动程序是不同的。也就是说在不同 的平台上编写的视频采集程序是不能够通用的。所以视频模块的功能不能与其他 部分代码联系的太过紧密。这样可以避免在不同平台上修改同样代码的麻烦,而 就目前来说,我只掌握了在 linux 上的视频驱动程序的 v4l2(video for linux two)api 而且是用 c 语言进行交涉,好在 c+的函数库对于 c 语言完全兼容。所以 对于这部分功能的整合就出现了两个方案: 方案一、利用 c 与 c+混编的方法,在 c+的函数总直接导入相关头文件并调 用相应的函数。但是这样显得代码依然具有相当的依赖性,换到 windows 平台上 依然需要修改很大一部分内部代码。对维护程序不是很方便。 山东农业大学学士学位论文 21 方案二、首先将视频模块用 c 语言编写完成,并生成可执行程序。在住程序 中直接调用执行程序执行。这种方案的好处是实现的视频模块与整个程序完全的 分离。更换平台是只需更换响应的视频模块的可执行程序即可几乎不用修改主程 序的代码。其他功能也能实现轻易的跨平台。 经过利弊权衡我选择了方案二。 视频服务端模块的具体流程如图: 图 4.6 视频服务端模块的具体流程图 视频采集缓冲流程图: 图 4.7 视频采集缓冲流程图 视频缓冲区使用示意图: 山东农业大学学士学位论文 22 图 4.8 视频缓冲区使用示意图 4.3 各模块功能具体设计与代码实现 4.3.1 用户列表模块功能具体实现 (1)用户列表的维护,与本地信息的广播。 用户列表的维护本软件采用了 qt 中的一个 qtablewidget 的组件,这个组件 的优点就是非常方便维护。本软件把每一条用户个人信息当做表中的一行,行中 的第 0、1、2 列分别用来保存用户的登陆名、主机名、和 ip 地址,这三个信息都 是系统识别用户所使用的,所以这三列都对于用户都是不可见(tablewidget- setcolumnhidden(0,true);) 。用户真正看到是表格的第四列的内容。这一列为了用户 信息的友好显示在表格中利用 qpixmap 为表格加入了一个图片其显示效果就如 qq 上的头像(show-seticon(qicon (qpixmap(“image/user.png“);) ,图标后边跟的是用户的 昵称和 ip。当有新来的用户时我们就在表格的第 0 行进行插入。表中原来的列就 会自动的后移,这就是表的好处之一,不用自己些循环语句来进行维护, qtablewidget 自己会进行维护。当由用户离开时也是如此,qtablewidget 甚至还 提供了一个查找函数 find,用户可利用这个函数轻易找到目标行而不必自己写循 环语句进行查询。然后直接接将此列删除即可。后面的行会自动补齐。每当本地 接收到一个新用户信息的时候会同时发回一个新用户信息,其目的就是告诉新来 用户自己的存在。保证了用户列表的完整性。用户列表的维护基本上由 newparticipant 和 participantleft 两个函数完成其接口如下: void newparticipant(qstring username,qstring localhostname, qstring ipaddress); 山东农业大学学士学位论文 23 void participantleft(qstring username,qstring localhostname , qstring time); 本地信息的广播利用 socket 广播了一个 newparticipant 类型的消息,消息内部 含有用户的登陆名、ip 和主机名等信息。这里说到了消息的类型,有必要提前说 明一下,为了方便系统顶定义了一个枚举数据类型 messagetype 用来区分接收或 者发出的消息是什么类型方便接收到的用户采用正确的处理方法,其定义如下: enum messagetypemessage,newparticipant,participantleft,filename,refuse,xmes sage,videochat,videoagree,videorefuse,videoclose; (2) 信息的接收与处理。 为了便于管理和程序数据的集中性,本软件的数据接收与处理工作全部由用户列 表窗口类来完成。为此在类中声明了一个 qudpsocket

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论