基于Linux平台的可视语音聊天系统设计与实现毕业论文.docx
《基于Linux平台的可视语音聊天系统设计与实现毕业论文.docx》由会员分享,可在线阅读,更多相关《基于Linux平台的可视语音聊天系统设计与实现毕业论文.docx(42页珍藏版)》请在冰豆网上搜索。
基于Linux平台的可视语音聊天系统设计与实现毕业论文
基于Linux平台的可视语音聊天系统设计与实现
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解安阳工学院关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
摘要
随着计算机网络技术的发展,各种各样基于网络的应用也随之诞生,比如基于互联网的信息发布,通信,数据共享等等。
局域网的发展也同样迅速。
很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET。
因此基于局域网的即时通信工具,就这样应运而生了。
论文研究局域网通信软件的设计与实现,并采用QT在linux平台上实现了一个局域网通信软件。
论文首先简要介绍了该软件的的开发环境,背景及其实现技术;然后详细介绍了局域网通信软件的需求分析和系统设计,并给出了该软件的实现方案及技术细节,最后利用虚拟机环境测试软件。
关键词:
LinuxQT局域网网络
Abstract
Alongwiththehigh-speeddevelopmentofthecomputernetworktechnology,variousofapplicationsbasedonnetworkwasborn,likeinformationreleasing,datasharing...ThedevelopmentoftheLANisthesamefast.Somegovernments,enterprisesandschoolsconstituteaLANfirst,thenjoinintoINTERNET.SotheinstantmessengerinLANwasborned.
ThisdissertationfocusesonthedesigningandimplementationofCommunicationsoftwareonLAN.AndaCommunicationsoftwareisbuiltusingQTonLinux.First,theDevelopmentenvironment,theBackgroundandthetechnologyarebrieflyintroduced.ThentherequirementsanalysisandsystematicdesignofaCommunicationsoftwareisdiscussedindetail.Andtheimplementationdetailsofeachfunctionmodule,isgiven.Last,usingtheVMtotestthesoftware.
Keywords:
Linux,QT,LAN,NetWork
前言
随着计算机网络的日益普及,人们通过网络进行交流显得越来越重要。
于是出现了一系列的通信软件。
网络通讯软件,最早的是ICQ。
随后中国腾讯公司制作出了自己的即时聊天软件OICQ,简称QQ。
继而很多公司都看出了即时聊天软件中所蕴涵的巨大商机,于是其他各大门户网站相距推出了自己的软件,象SoHu的SQ,MSN的Msn,YaHoo的雅虎通等。
Linux是unix操作系统的克隆,可以免费使用,遵循GPL声明,可以自由修改和传播。
可以说,与Windows等商业操作系统不同,Linux完全是一个自由的操作系统。
Linux内核是由LinusTorvalds和通过Inetrface组织起来的开发小组完成的。
Linux包含了人们希望操作系统拥有的所有功能特性,这些功能包括真正的多任务,虚拟内存,世界上最快的TCP/IP驱动程序,共享库和多用户支持。
Linux在企业平台上的应用至少包括:
电子商务,网络以及相关服务,企业内部管理协调应用,信息数据库应用。
Linux在桌面端的应用至少包括:
网络客户端、个人机、手提笔记本电脑。
嵌入式技术具有广阔的应用前景,它可以渗透于人们生活和工作的诸多领域。
嵌入式应用对操作系统的要求主要是:
功能专一高效、高度节约资源、启动速度快。
Linux的特点使得它天生就是一个适合于嵌入式开发和应用的操作系统。
由于多种原因,Linux在国内的推广比国外晚了几年,国内Linux发展还处于一个比较低的层次,初级入门用户很多,实际应用用户少。
而人事自由软件开发的人就更少了。
本文所要研究阐述的是如何在Linux开发平台上,利用现有的网络编程知识,设计和开发局域网里基于Linux的即时通讯软件。
1聊天系统技术概述
1.1即时通讯系统概述
即时通讯(InstantMessenger,简称IM),是指能够即时发送和接收互联网消息等的业务。
自1998年面世以来,即时通讯的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。
即时通讯不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。
是一种终端连网即时通讯网络的服务。
即时通讯不同于e-mail在于它的交谈是即时的。
大部分的即时通讯服务提供了状态信息的特性──显示联络人名单,联络人是否在在线与能否与联络人交谈[1]。
即时通讯除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊天用户直接联紧在一起。
通过网站信息向聊天用户群及时群发送,可以迅速吸引聊天用户群对网站的关注,从而加强网站的访问率与回头率;即时通信利用的是互联网线路,通过文字、语音、视频、文件的信息交流与互动,有效节省了沟通双方的时间与经济成本;即时通信系统不但成为人们的沟通工具,还成为了人们利用其进行电子商务、工作、学习等交流的平台。
1.2Linux简介
Linux是一种自由和开放源码的类Unix操作系统。
目前存在着许多不同的Linux,但它们都使用了Linux内核。
Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。
Linux是一个领先的操作系统,世界上运算最快的10台超级计算机运行的都是Linux操作系统。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。
Linux得名于计算机业余爱好者LinusTorvalds[2]。
Linux的基本思想有两点:
第一,一切都是文件;第二,每个软件都有确定的用途。
其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。
至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
Linux流行自然离不开其特性。
(1)完全免费:
Linux是一款免费的操作系统,用户可以通过网络或其他途径免费获得,并可以任意修改其源代码。
这是其他的操作系统所做不到的。
正是由于这一点,来自全世界的无数程序员参与了Linux的修改、编写工作,程序员可以根据自己的兴趣和灵感对其进行改变。
这让Linux吸收了无数程序员的精华,不断壮大。
(2)完全兼容POSIX1.0标准:
这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。
这为用户从Windows转到Linux奠定了基础。
许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。
(3)多用户、多任务:
Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。
多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。
(4)良好的界面:
Linux同时具有字符界面和图形界面。
在字符界面用户可以通过键盘输入相应的指令来进行操作。
它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。
在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。
(5)丰富的网络功能:
Unix是在互联网的基础上繁荣起来的,Linux的网络功能当然不会逊色。
它的网络功能和其内核紧密相连,在这方面Linux要优于其他操作系统。
在Linux中,用户可以轻松实现网页浏览、文件传输、远程登陆等网络工作。
并且可以作为服务器提供WWW、FTP、E-Mail等服务。
(6)可靠的安全、稳定性能:
Linux采取了许多安全技术措施,其中有对读、写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。
Linux由于需要应用到网络服务器,这对稳定性也有比较高的要求,实际上Linux在这方面也十分出色。
(7)支持多种平台:
Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。
此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。
2001年1月份发布的Linux2.4版内核已经能够完全支持Intel64位芯片架构。
同时Linux也支持多处理器技术。
多个处理器同时工作,使系统性能大大提高。
1.3QTCreator概述
QtCreator是跨平台的QtIDE,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。
此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。
根据官方描述,QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务[3]。
在功能方面,QtCreator包括项目生成向导、高级的C++代码编辑器、浏览文件及类的工具、集成了QtDesigner、QtAssistant、QtLinguist、图形化的GDB调试前端,集成qmake构建工具等。
Qt Creator 主要是为了帮助新 Qt 用户更快速入门并运行项目,还可提高有经验的 Qt 开发人员的工作效率。
使用强大的C++代码编辑器可快速编写代码。
语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。
使用浏览工具管理源代码。
集成了领先的版本控制软件,包括Git、Perforce和Subversion开放式文件,无须知晓确切的名称或位置搜索类和文件跨不同位置或文件沿用符号在头文件和源文件,或在声明和定义之间切换。
为 Qt跨平台开发人员的需求而量身定制。
集成了特定于Qt的功能,如信号与槽(Signals&Slots)图示调试器,对Qt类结构可一目了然集成了QtDesigner可视化布局和格式构建器只需单击一下就可生成和运行Qt项目。
1.4单播、广播、组播浅析
硬件组播(multicasting)是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。
当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。
广播(broadcasting)是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。
它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止[4]。
在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址(broadcastaddress)来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。
单播(unexacting)是指只有一个目的地的数据报传递。
从投递目的地的数量而言,单播和广播均可看作是组播的一个子集。
单播可以看作仅包括一台机器群组的组播;广播可以看作包含了所有机器群组的组播。
但从数据报的投递方式而言,单播、广播和组播还是有较大的区别。
1.5Linuxsocket概述
socket接口是TCP/IP网络的API,socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解socket接口[5]。
socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解socket了。
网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。
socket也具有一个类似于打开文件的函数调用socket(),该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过该socket实现的。
常用的socket类型有两种:
流式socket(SOCK_STREAM)和数据报式socket(SOCK_DGRAM)。
流式是一种面向连接的socket,针对于面向连接的TCP服务应用;数据报式socket是一种无连接的socket,对应于无连接的UDP服务应用。
2界面设计工具—QT
2.1QT发展历史
Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司出品,目前包括Qt,基于Framebuffer的QtEmbedded,快速开发工具QtDesigner,国际化工具QtLinguist等部分Qt支持所有Unix系统,当然也包括Linux,还支持WinNT/Win2k,Win95/98平台。
Trolltech公司在1994年成立,但是在1992年,成立Trolltech公司的那批程序员就已经开始设计Qt了,Qt的第一个商业版本于1995年推出然后Qt的发展就很快了,下面是Qt发展史上的一些里程碑:
1996OctKDE组织成立;
1998Apr05Trolltech的程序员在5天之内将Netscape5.0从Motif移植到Qt上;
1998Apr08KDEFreeQt基金会成立;
1998Jul09Qt1.40发布;
1998Jul12KDE1.0发布;
1999Mar04QPL1.0发布;
1999Mar12Qt1.44发布;
1999Jun25Qt2.0发布;
1999Sep13KDE1.1.2发布;
2000Mar20嵌入式Qt发布;
2000Sep06Qt2.2发布;
2000Oct05Qt2.2.1发布;
2000Oct30Qt/Embedded开始使用GPL宣言;
2000Sep04Qtfreeedition开始使用GPL。
2.2QT优点
基本上,Qt同XWindow上的Motif、Openwin、GTK等图形界面库和Windows台上的MFC、OWL、VCL、ATL是同类型的东西,但是Qt具有下列优点。
2.2.1优良的跨平台特性
Qt支持下列操作系统:
MicrosoftWindows95/98、MicrosoftWindowsNT、Linux、Solaris、SunOS、HP-UX、DigitalUNIX、Irix,FreeBSD、BSD/OS、SCO、AIX、OS390、QNX等等。
2.2.2面向对象
Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signals/slots的安全类型来替callback,这使得各个元件之间的协同工作变得十分简单。
2.2.3丰富的API
Qt包括多达250个以上的C++类,还替供基于模板的collectionsserialization、file、I/Odevice、directorymanagement、date/time类。
甚至还包括正则表达式的处理功能。
(1)支持2D/3D图形渲染,支持OpenGL。
(2)大量的开发文档。
(3)XML支持。
2.3KDE和GNOME
但是真正使得Qt在自由软件界的众多Widgets(如Lesstif、Gtk、EZWGL、Xforms、fltk等等)中脱颖而出的还是基于Qt的重量级软件KDE。
有趣的是,KDE也是使得Trolltech公司承受巨大压力的一个原因。
下面我们将来看看这场著名的自由软件圣战--"KDE/QT.VS.Gnome/Gtk"是怎么发生的。
在Unix的图形界面一向是以MIT的XWindow系统为标准,可是在商业应用上有两大流派,一派是以Sun公司领导的Openlook阵营,一派是IBM/HP领导的OSF的Motif,双方经过多年竞争之后,Motif最终胜出,成为最普遍使用的界面库,后来双方又妥协出一个CDE(CommonDesktopEnviroment)作为一个标准的图形界面。
但是Motif/CDER的价格非常昂贵,在这同时微软的Windows图形界面发展速度非常快,而Unix界的后起之秀Linux也急需一个可靠并且免费的图形界面。
1996年10月,由开发图形排版工具Lyx的德国人MatthiasEttrich发起了KDE计划。
KDE的全称为KDesktopEnvironment,可以看出是针对CDE。
KDE本身是采用GPL宣言的,但是KDE却是使用Qt来作为其底层库,因为当时Qt已经将其Unix版本自由发布了,但是Qt并不遵循GPL,因此KDE被很多自由软件的作者攻击,认为利用非自由软件开发违背了GPL的精神,于是GNU的狂热信徒兵分两路,一路是去制作Harmonny,试图重写一套兼容于Qt的替代品,另一路是由一个26岁的墨西哥程序员MiguelDeIcaza领导下重新开发一套叫GNOME来替代KDE。
由于Linux界的老大RedHat不喜欢KDE/Qt的版权,因此RedHat甚至专门派出了几个全职程序员来加入GNOME进行开发工作,于是一场同MotifVSOpenlook相似的圣战就这么打起来了。
Trolltech为了KDE曾数次修改Qt的版权,从成立KDEFreeQt基金会到采用QPL,可谓是费尽心机,但是GNOME采用的GTK一开始就是完全的GPL,因此在这个方面GNOME有一定的优势,加上Qt/KDE采用C++开发,入门的门槛比较高,而GTK/Gnome采用C,因此GNOME吸引了更多的自由软件开发者,但是KDE毕竟先走了一步,推出的KDE1.1.2十分稳定,而当时急忙中推出的GNOME1.0的系统稳定性奇差,有人甚至笑称GNOME1.0还没有KDE1.0Alpha稳定。
但是GNOME后来发展比较快,大有迎头赶上的势头。
当时双方的开发者在网络上炒得天翻地覆,连Linux之父Linus只是说了一句喜欢用KDE都倍受指责。
战争到了第三个年头,也就是2000年,可谓是风云突变,一个接一个重大的事件先后发生:
首先是一批从Apple公司出来的工程师成立了一个叫Eazel的公司替GNOME设计界面,然后是一批GNOME程序员成立了一个HelixCode公司替GNOME提供商业支持,而大家期待以久的KDE2.0也终于发布了,这恐怕是目前最为庞大的自由软件了之一,除了KDE本身,还包括Koffice套件,Kdevelop等等大批软件,其主力软件Kounqueror也是第一个可以同微软的InternetExploer相抗衡的浏览器。
而Sun公司,RedHat公司,Eazel公司,HelixCode等一批公司成立了一个GNOME基金会,Sun还宣布将把重量级办公软件Staroffice同GNOME集成,Trolltech公司自然不能坐以待毙,于今年10月4日将Qt的freeedition变为GPL宣言,彻底解决了KDE的版权问题,又推出了嵌入式Qt,给了GNOME阵营一个有力的回击。
到现在为止,这场战争还在继续,相信我们不能很快看到结果。
一般说来,目前GNOME吸引的公司比较多,但是KDE/Qt的开发的效率和质量比GNOME高,而且在Office/嵌入式环境中先走一步,在一定时间内还将处于优势地位。
2.4QTSocket技术介绍
QT是诺基亚公司开发的一个跨平台的C++图形用户界面应用程序框架。
使用Qt开发的软件可以在任何支持的平台上编译与运行,而不需要修改源代码。
使用QT开发的软件会自动依据平台的不同,而表现出平台特有的图形界面风格。
QT为实现通信功能,特别提供了QTNetwork来支持网络程序设计功能,支持通用协议,如HTTP、FTP和DNS,包括对异步HTTP1.1的支持,并支持较低层的TCP/IP和UDP协议,提供了如QTcpSocket类、QTcpServer类和QUdpSocket类等供开发人员使用[6]。
QTcpSocket类提供一个TCP套接字。
TCP是一个面向连接,可靠的通信协议,非常适合于连续不断的数据传递。
QTcpSocket是QAbstractSocket类非常方便的一个子类,帮助开发人员创建一个TCP连接和数据流交流。
QTcpServer类用来与远端伺服器连线,如果开发人员要接受客户端连线,则使用QTcpServer。
QTcpServer使用listen()方法开始倾开所指定的连接埠,开发人员可以使用isListening()方法测试是否正在倾听连线,当连线发生时,QTcpServer会发出newConnection()的Signal,开发人员可以使用QTcpServer的nextPendingConnection()取得代表客户端连线的QTcpSocket物件,接下来就可以使用它来与客户端进行资料传输。
使用QTcpSocket类实现客户端的流程如图2.1所示。
图2.1tcp传输客户端流程图
2.5QT信号与槽机制
信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解。
信号和槽是一种高级接口,应用于对象之间的通信,它是QT的核心特性,也是QT区别于其它工具包的重要地方。
信号和槽是QT自行定义的一