毕业设计(论文)-网络视频聊天软件系统的设计与实现.doc_第1页
毕业设计(论文)-网络视频聊天软件系统的设计与实现.doc_第2页
毕业设计(论文)-网络视频聊天软件系统的设计与实现.doc_第3页
毕业设计(论文)-网络视频聊天软件系统的设计与实现.doc_第4页
毕业设计(论文)-网络视频聊天软件系统的设计与实现.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

编号:( )字 号本科生毕业设计(论文)题目: 网络视频聊天软件系统的设计与实现 姓名: 学号: 班级: 信息安全07-2班 二一一年六月本科生毕业设计姓 名: 学 号: 学 院: 计算机科学与技术 专 业: 信息安全 设计题目: 网络视频聊天软件系统的设计与实现 专 题: 指导教师: 职 称: 讲师 2011年 6月 徐州中国矿业大学毕业设计任务书学院 计算机 专业年级 信息安全07-2班 学生姓名 任务下达日期:2011年 1月 10日毕业设计日期: 2011年 2 月 21日 至 2011年 6 月 15日毕业设计题目:网络视频聊天软件系统的设计与实现毕业设计专题题目:毕业设计主要内容和要求:1) 学习视频通信,软件开发等相关知识与技术。2) 网络聊天软件设计与分析。3) 网络聊天软件的实现。4) 对软件功能,模块进行测试,完善。5) 根据上述工作撰写论文。院长签字: 指导教师签字:中国矿业大学毕业设计指导教师评阅书指导教师评语(基础理论及基本技能的掌握;独立解决实际问题的能力;研究内容的理论依据和技术方法;取得的主要成果及创新点;工作态度及工作量;总体评价及建议成绩;存在问题;是否同意答辩等):成 绩: 指导教师签字: 年 月 日中国矿业大学毕业设计评阅教师评阅书评阅教师评语(选题的意义;基础理论及基本技能的掌握;综合运用所学知识解决实际问题的能力;工作量的大小;取得的主要成果及创新点;写作的规范程度;总体评价及建议成绩;存在问题;是否同意答辩等):成 绩: 评阅教师签字: 年 月 日中国矿业大学毕业设计答辩及综合成绩答 辩 情 况提 出 问 题回 答 问 题正 确基本正确有一般性错误有原则性错误没有回答答辩委员会评语及建议成绩:答辩委员会主任签字: 年 月 日学院领导小组综合评定成绩:学院领导小组负责人: 年 月 日摘 要视频通信既是最古老的通信方式,也是到目前通信界仍在不断研究和探索的新兴业务。古代的烽火狼烟可为最早的一种“视频通信”。本文中视频通信是指连续、动态的图像通信。由于技术、政策、使用费用等多方面的原因,视频通信业务在全球范围内并没有大规模地使用, 但人们一直没有停止提供和使用视频通信业务的努力。人们对视频通信业务的需求促进与其相关的网络、信息处理、网络接入等技术的发展,同时这些技术的不断发展也反过来促使视频通信业务的不断成熟。未来视频通信业务将会承载于有线或无线internet上,同时其服务质量也将会满足商业化发展的需要。目前面临的挑战是视频通信应用中会涉及很多知识产权问题、家庭组网尚未形成明确的主流技术,此外还有安全问题和商业模式的建立等。但我国与其他许多国家处在同一起跑线上,存在着许多创新的机会和领域。本文着重介绍以微软实时通信(rtc)api为基础的网络视频聊天软件的设计与实现,并进行相应的测试与分析。关键字:网络视频聊天; 网络视频会议; 微软实时通信(rtc); vc+6.0;abstractvideo communication is the most ancient communication mode, is also far systems research and exploration continues the emerging business. ancient fireworks to defeat one of the earliest video communication. this paper refers to the video communication in continuous and dynamic image communication. as technology, policy, use fees and so on various reasons, video communications business globally and no large-scale land use, but people havent stopped offering and use video communications business efforts. people on the video communications business needs to promote related network, information processing, network access technology development, at the same time these technology unceasing development in turn prompted video communications business continues to mature. future video communications business will carry on wired or wireless internet, and its service quality will also meet the needs of the development of commercialization. now the challenge is to video communication applications will involve a lot of intellectual property rights, family network has not yet become clear mainstream technology, in addition to security issues and business model establishment, etc. but china and many other countries in the same starting line, there exist many innovative opportunity and fields. this paper introduce to microsoft real-time communication (rtc) api based network video chat software design and implementation, and makes the corresponding testing and analysis. keywords: network video chat; network video conference; microsoft real-time communication (rtc); vc + + 6.0; 目 录1 绪论11.1设计背景11.2设计意义12 需求分析32.1系统需求32.2开发环境需求32.3技术需求32.4功能需求33 软件系统设计43.1相关技术43.1.1vc+6.0基础43.1.2mfc介绍43.1.3socket网络编程43.1.4组件对象模型(com)43.1.5微软实时通信(rtc)43.2软件架构103.3模块分析103.3.1主窗口模块103.3.2视频聊天对话框模块103.3.1可连接对象模块103.3.1文字聊天对话框模块104 软件系统实现124.1模块设计124.2模块接口124.3运行环境的介绍和配置174.4界面介绍185 软件系统测试215.1服务器模式下功能测试215.2文字聊天功能测试215.3视频聊天功能测试21结论22参考文献23翻译部分英文原文24中文译文27致谢30 中国矿业大学2006届本科生毕业设计 第30页1 概述1.1设计背景随着人们对视频和音频信息的需求愈来愈强烈,追求远距离的视音频的同步交互成为新的时尚。近些年来,依托计算机技术、通信技术和网络条件的发展,集音频、视频、图像、文字、数据为一体的多媒体信息,使越来越多的人开始通过互联网享受到网上生活、远程医疗、远程通讯的乐趣,缩短了时区和地域的距离。远程通信的各种优势给人们带来的方便也促使人们对这一领域进行更加深入的探索。基于不同平台以及不同开发工具的网络视频会议系统层出不穷。视频会议系统在我国开始发展的初期,政府部门的应用就占据了重要位置,覆盖中央到直辖市和各省会城市的国家公众视频会议骨干网已经完工。自1994年9月投入使用以来,国务院等机关先后利用该网召开了三百多次全国范围的可视通讯会议。整个系统运行情况良好,得到了国家领导人和各部委领导的高度赞扬。近年来随着电子政务工程的逐步推进,政府部门更加关注视频会议系统建设。在经济发达地区(例如浙江、山东、广东),视频会议网已覆盖到地市级城市,有的甚至覆盖到县一级。除各级政府之外,其它诸如检察院、法院、公安和和水利等职能部门也是视频会议系统的重要用户。视频会议系统是指通过现有的各种电气通讯传输媒体,将人物的静态/动态图像、语音、文字、图片等多种信息分送到各个用户的计算机上,使得在地理上分散的用户可以共聚一处,通过图形、声音等多种方式交流信息,增加双方对内容的理解能力。视频会议系统对于减少差旅费用等机构开支;提高机构运作效率;提高机构形象有利于加强对外交往;有利于政策方针的迅速准确传达;有利于广泛收集意见;有利于加强内部交流;员工培训等方面带来巨大的直接和间接效益。由于视频会议系统的这些优点,使得视频会议系统备受关注。并且已经有越来越多的人利用这种方式进行交流沟通,不仅方便而且拉近了人与人之间的距离。现在的一些软件像qq以及msn等软件为人们的视频聊天提供了许多方便。1.2设计意义视频会议系统可开展企业间的远程视频会议和业务培训。现在很多公司在全国很多城市都有自己的分公司或是办事处,有时候对于总公司的信息或是培训等不能很好的实施到分公司,现在视频会议系统的使用,跨地域的远程会议变得很容易,总公司的任何信息可通过视频会议系统及时有效地传达到分公司,总公司对分公司人员的培训也可以利用视频会议系统,视频会议系统支持桌面和程序的共享,可以很好的通过视频会议进行产品培训,技术培训等。在培训的过程中,还可以用视频会议系统里的图板注解、媒体共享、演示共享和文件传输来进行ppt,图片,文档,多媒体等的。视频会议系统也可实现与异地客户的远程业务谈判。对于异地的客户,视频会议系统可以进行音视频的同步传输,加入会议的与会人员可以跟会议主席人员进行语音交流,会议主席人员可对参加会议人员提出的问题进行及时回答。利用这个功能就能很好的实现远程的业务谈判。利用视频会议系统也可以对客户需要的产品信息及技术知识,可在会议系统里通过ppt进行演示播放,让客户更清晰、明了的了解公司及产品信息,促进商务合作。视频会议系统还可助力企业的远程销售。企业在利用视频会议系统来进行远程销售时,对产品或公司的介绍可以全视频播放展示。视频会议系统可以将产品和企业的介绍作为全视频形式,这样可以使潜在客户更进一步了解企业自身的产品和企业介绍,跟以前仅用图片或文字的方式展示,更容易让客户接受。视频会议在各行业的广泛应用,使企业降低大量的成本支出,这也是很多企业愿意把视频会议系统纳入到企业的运营中的重要原因。作为视频会议系统的提供商傲群信息(audividi),其总部位于美国加利福尼亚的fremont。公司前身(原威盛软件)是世界上最大的独立主机板晶片组设计公司via(威盛电子)的核心科研机构之一,长期为via、htc、via telecom等世界知名高科技企业提供嵌入式系统设计和视频通信产品研发。丰富的技术积累和研发投入,使傲群(audividi)在通信传输、音视频压缩、数据处理领域拥有多项核心专利技术,具备了业界领先的自主研发与创新实力。视频会议系统为企业大幅提高运作效率、降低运营成本,是企业提升核心竞争力的必需设备之一,它为企业节约了大量的会议开支和时间,提高处理事务的速度和工作效率,正逐步成为企业在信息时代沟通的新宠儿,使人们工作更快乐、更高效。2 需求分析2.1系统需求本软件客户端需要在xp或更高版本windows系统下运行。有局域网或广域网连接。语音通信需要有麦克风,声卡等音频设备支持。进行视频通信需要摄像头等视频采集设备支持。2.2开发环境需求 本软件在vc+6.0环境下设计实现,以微软基本类库(mfc)中基于对话框模板为基础;需要安装微软实时通信(rtc)开发包,版本:client api v1.2 sdk;需要socket api支持。2.3技术需求1,vc+编程基础2,mfc基于对话框模板的结构与原理3,socket网络编程基础4,基于c/s模式的网络通信原理5,微软实时通信(rtc)开发包2.4功能需求2.4.1模式本软件分为点对点ip模式和服务器模式,ip模式下,直接输入通信对象的ip地址即可进行相应语音视频或文字通信。服务器模式下,需要先连接服务器,连接成功后,即可从服务器获得同时连接服务器的所有客户的昵称,点击昵称即可进行相关通信。2.4.2 通信类型即时文本通信:在ip模式或服务器模式下选择通信对象,即可通过点击“文字聊天”进行文本通信,可同时进行多个文本通信过程。即时语音视频通信:在ip模式或服务器模式下选择通信对象,即可通过点击“视频聊天”进行语音视频通信。弹出视频聊天对话框,大窗口显示对方影像,右下小窗口显示本机影像,可进行音量大小等功能的调节。每个客户端只能打开一个视频通信过程。2.4.2 服务器与客户端 本软件分为服务端与客户端两部分。服务器端需要建立服务,客户端才能连接。服务端可以显示当前连接的客户昵称以及ip地址。客户端则可根据选择进行点对点模式或服务器模式的通信。进行点对点模式通信不需要连接服务器。3 软件系统设计3.1相关技术3.1.1vc+6.0基础在vc+6.0是microsoft公司推出的一个基于windows系统平台、可视化的集成开发环境,它的源程序按c+语言的要求编写,并加入了微软提供的功能强大的mfc(microsoft foundation class)类库。mfc中封装了大部分windows api函数和windows控件,它包含的功能涉及到整个windows操作系统。mfc不仅给用户提供了windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。因此,使用vc+提供的高度可视化的应用程序开发工具和mfc类库,可使应用程序开发变得简单。3.1.2mfc介绍mfc,微软基础类(microsoft foundation classes),同vcl类似,是一种application framework,随微软visual c+ 开发工具发布。目前最新版本为9.0(截止2008年11月)。该类库提供一组通用的可重用的类库供开发人员使用。大部分类均从cobject 直接或间接派生,只有少部分类例外。 mfc 应用程序的总体结构通常由开发人员从mfc类派生的几个类和一个cwinapp类对象(应用程序对象)组成。mfc 提供了mfc appwizard 自动生成框架。 windows 应用程序中,mfc 的主包含文件为afxwin.h。 此外mfc的部分类为mfc/atl 通用,可以在win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为vc+开发必须使用mfc。这种想法是错误的。作为application framework,mfc的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个win32 程序设计。 mfc,微软基础类(microsoft foundation classes),实际上是微软提供的,用于在c+环境下编写应用程序的一个框架和引擎,vc+是windos下开发人员使用的专业c+ sdk(sdk,standard software develop kit,专业软件开发平台),mfc就是挂在它之上的一个辅助软件开发包,mfc作为与vc+血肉相连的部分(注意c+和vc+的区别:c+是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而vc+只是一个编译器,或者说是一种编译器+源程序编辑器的ide,ws,platform,这跟pascal和delphi的关系一个道理,pascal是delphi的语言基础,delphi使用pascal规范来进行win下应用程序的开发和编译,却不同于basic语言和vb的关系,basic语言在vb开发出来被应用的年代已经成了basic语言的新规范,vb新加的basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使vb既是一个ide,又成长成一个新的程序设计语言),mfc同bc+集成的vcl一样是一个非外挂式的软件包,类库,只不过mfc类是微软为vc+专配的. mfc是win api与c+的结合,api,即微软提供的windos下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,borland就是第三方)的编程语言来进行对windos下应用程序的开发,使这些被开发出来的应用程序能在windos下运行,比如vb,vc+,java,dehpi编程语言函数本质上全部源于api,因此用它们开发出来的应用程序都能工作在winos的消息机制和绘图里,遵守windos作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供api,这个世上对win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到mfc是微软对api函数的专用c+封装,这种结合一方面让用户使用微软的专业c+ sdk来进行win下应用程序的开发变得容易,因为mfc是对api的封装,微软做了大量的工作,隐藏了好多程序开发人员在win下用c+ & mfc编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了mfc对类封装中的一定程度的的冗余和迂回,但这是可以接受的. 最后要明白mfc不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在windos(用mfc编写的程序绝大部分都在windos中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对c+和mfc的学习中最难的部分是指针,c+面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构c+版。 mfc是微软封装了的api。什么意思呢?windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用windows的接口函数api)对于程序员来说非常的困难,因为,api函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。mfc是面向对象程序设计与application framework的完美结合,他将传统的api进行了分类封装,并且为你创建了程序的一般框架, mfc是对windowsapi的封装,大大简化了我们的工作;学vc主要就是要学mfc,大约有100多个类,但常用的也就二三十个。应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。 重要的mfc:cwnd:窗口,它是大多数“看得见的东西”的父类(windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图cview、框架窗口cframewnd、工具条ctoolbar、对话框cdialog、按钮cbutton,etc;一个例外是菜单(cmenu)不是从窗口派生的。该类很大,一开始也不必学,知道就行了。 cdocument文档,负责内存数据与磁盘的交互。最重要的是onopendocument(读入),onsavedocument(写盘),serialize(读写) cview视图,负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是ondraw(重画窗口),通常用cwnd:invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。你自己的许多功能都要加在里面,你打交道最多的就是它。 cdc设备文本。无论是显示器还是打印机,都是画图给用户看。这图就抽象为cdc。cdc与其他gdi(图形设备接口)一起,完成文字和图形、图像的显示工作。把cdc想象成一张纸,每个窗口都有一个cdc相联系,负责画窗口。cdc有个常用子类cclientdc(窗口客户区),画图通常通过cclientdc完成。 cdialog对话框 :cwinapp应用程序类。似于c中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。最常用函数initinstance():初始化。 cgdiobject及子类,用于向设备文本画图。它们都需要在使用前选进dc。 cpen笔,画线 cbrush刷子,填充 cfont字体,控制文字输出的字体 cbitmap位图 cpalette调色板 crgn区域,指定一块区域可以用于做特殊处理。 cfile文件。最重要的不外是open(打开),read(读入),write(写) cstring字符串。封装了c中的字符数组,非常实用。 cpoint点,就是(x,y)对 crect矩形,就是(left,top,right,bottom) csize大小,就是(cx,cy)对(宽、高)mfc是在1992年的microsoft 16位版的c/c+编译器的7.0版本中作为一个扩展轻量级的windows api面向对象的c+封装库而引入的。此时,c+因为它在和api方面的卓越表现,刚刚开始被用来取代c应用于开发商用软件。因此,他们推出了替代早期的老式的字符界面的集成开发环境(ide)的pwb。 有趣的是,mfc使用“afx”作为所有的全局函数的前缀,“afx”作为全局变量的前缀。因为在mfc的早期开发阶段它叫“application framework extensions”缩写为“afx”。afx提供了对windows api的高度抽象,建立了全新的面向对象的afx api,但它对于新手来说太复杂了,所以afx小组不得不重新开始。后来他们创建了一组c+类,这就是mfc。mfc这个名字被采用得太晚了以至于没来得及修改这些引用。 最近,mfc8.0和visual studio 2005一起发布了;mfc9.0和visual studio 2008一起发布。在免费的express版本的visual studio 2005/2008中没有包含mfc。 作为一个强有力的竞争对手,为borland的turbo c+编译器设计owl(object windows library)在同一时间也发布了。但最后,borland停止了对owl的继续开发并且不久就从microsoft那里购买了mfc头文件,动态链接库等的授权,微软没有提供完整的mfc的集成支持。之后borland发布了vcl(visual component library)来替换owl框架。3.1.3socket网络编程套接口有三种类型:流式套接口,数据报套接口及原始套接口.流式套接口定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输.数据报套接口定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错.原始套接口允许对低层协议如ip或icmp直接访问,主要用于新的网络协议实现的测试等.无连接服务器一般都是面向事务处理的,一个请求一个应答就完成了客户程序与服务程序之间的相互作用。若使用无连接的套接口编程,程序的流程可以用图3-1表示。面向连接服务器处理的请求往往比较复杂,不是一来一去的请求应答所能解决的,而且往往是并发服务器。使用面向连接的套接口编程,可以通过图3-2来表示其时序。套接口工作过程如下:服务器首先启动,通过调用socket()建立一个套接口,然后调用bind()将该套接口和本地网络地址联系在一起,再调用listen()使套接口做好侦听的准备,并规定它的请求队列的长度,之后就调用accept()来接收连接.客户在建立套接口后就可调用connect()和服务器建立连接.连接一旦建立,客户机和服务器之间就可以通过调用read()和write()来发送和接收数据.最后,待数据传送结束后,双方调用close()关闭套接口。由于windows的基于消息的特点,winsock和bsd套接口相比,有如下一些新的扩充:1.异步选择机制异步选择函数wsaasyncselect()允许应用程序提名一个或多个感兴趣的网络事件,如fd_read,fd_write,fd_connect,fd_accept等等代表的网络事件.当被提名的网络事件发生时,windows应用程序的窗口函数将收到一个消息.这样就可以实现事件驱动了.2.异步请求函数异步请求函数允许应用程序用异步方式获得请求的信息,如wsaasyncgetxbyy()类函数. 这些函数是对bsd标准函数的扩充.函数wsacancelasyncrequest()允许用户中止一个正在执行的异步请求.3.阻塞处理方法winsock提供了钩子函数负责处理windows消息,使windows的消息循环能够继续.winsock提供了两个函数(wsasetblockinghook()和wsaunhookblockinghook()让应用程序设置或取消自己的钩子函数.函数wsaisblocking()可以检测是否阻塞,函数wsacancelblockingcall()可以取消一个阻塞的调用.4.错误处理winsock提供了两个wsagetlasterror()和wsasetlasterror()来获取和设置最近错误号.5.启动和终止由于windows sockets的服务是以动态连接库winsock.dll形式实现的,所以必须要先调用wsastartup()函数对windows sockets dll进行初始化,协商winsock的版本支持,并分配必要的资源.在应用程序关闭套接口后,还应调用wsacleanup()终止对windows sockets dll的使用,并释放资源,以备下一次使用.3.1.4组件对象模型(com)组件对象模型,也称组件对象模型,英文为component object model,缩写com,是微软对于网页服务器与客户端、增益集与office系列软件之间交互的一项软件组件技术。自动化是指应用程序的com化来让外部可以调用它们的功能,以及外部调用这些功能的方法。自动化的典型应用是微软的很多软件中都支持的宏。由于自动化普遍使用ole的标准接口来实现,所以这个技术有时也称ole自动化。com是微软自1993年便提出的组件式软件平台,用来做进程间通信(inter-process communication, ipc)以及当作组件式软件开发的平台。com提供跟编程语言无关的方法实现一个软件对象,因此可以在其他环境中运行。com要求软件组件必须遵照一个共同的接口,该接口与实现无关,因此可以隐藏实现属性,并且被其他对象在不知道其内部实现的情形下正确的使用。com并被实现于多个平台之上,并不限于windows操作系统之上。但还是只有windows最常使用com,且某些功能已被目前的.net平台取代。com是基于组件对象方式概念来设计的,在基础中,至少要让每个组件都可以支持二个功能:1,查询组件中有哪些接口 2,让组件做自我生命管理,此概念的实践即为参考计数(reference counting) 这二个功能即为com的根:iunknown接口所提供的iunknown:queryinterface(),iunknown:addref()及iunknown:release()三个方法的由来。所有的com组件都要实现iunknown,表示每个com组件都有相同的能力。只由com派生实现出来的组件,称为纯com组件。但在windows持续发展时,visual basic 4.0开始支持ocx,也就是ole custom control,这让微软开始思考要如何让com组件可以跨语言支持,在这样的要求下,必须要提供一个一致的接口,以及提供一组可以调用接口内方法的能力,由于纯com组件只能够支持c/c+ 的直接访问,为了要达到跨语言的能力,在com中必须要支持在外部调用内部方法的机能,这个机能造就了invoke()方法,另外为了跨语言的支持,com应该要提供简单的组件访问识别方式,这也就是会有getidsofnames()的原因,将这些方法组合起来,定义出的必要接口,称为idispatch接口,所有实现此接口的,都可以支持跨语言的支持。微软将实现此接口的组件都称为自动化(automation) 组件。3.1.5微软实时通信(rtc)开发包 软实时通信(rtc)api是一套提供有丰富功能的核心组件。这些性能我们可以在windows messenger和其它使用实时通信api的应用程序中看到。本文将介绍由这些组件提供的多媒体支持。应用程序开发人员可能想把实时通信特色整合到他们的应用程序中去,还可以使用实时通信特性来构建他们自己的社区根据microsoft windows xp的介绍,丰富的通信特性已经被组合并增强以便在基础结构中提供为实时通信(rtc)软件提供支持。这些特性被microsoft windows messenger用来显示实时语音和视频、即时消息及其他协同信息。此外,api也显示出能够在任何应用程序中使用其丰富的通信基础结构。 rtc以组件对象模型(com)的方式发布,提供了一整套api供程序员建立点到点的,多点结合的多媒体通信程序。学习rtc就是学习其所提供的组件和接口功能而不需要具体了解组件内部是如何实现接口。3.2软件架构3.2.1服务端服务端比较简单,只有主对话框。主对话框类中创建了负责通信的socket相关过程和消息处理函数。3.2.2客户端客户端在主对话框显示前,先显示昵称输入对话框,然后进入主对话框。主对话框类中创建与服务器连接所需要的socket对象,以及进行媒体通信所需的rtc客户端对象。通过按钮事件分别创建文本聊天对话框和视频聊天对话框并建立相应的会话对象进行连接。同时在主对话框类实现了处理socket事件的响应函数,和处理rtc事件的响应函数。3.3模块分析由于服务端比较简单,因此只介绍客户端模块:3.3.1主窗口模块主窗口主要负责以下几项工作:1,socket对象创建以及socket网络连接和事件处理。2,文字聊天,视频聊天会话的创建和初始化。3,rtc事件处理函数的实现。4,客户端状态如是否连接服务器,是否已打开视频会话等的记录5,主窗口显示前会先创建昵称输入对话框来获得用户名3.3.2视频对话框模块对象实例由主窗口在接收到视频连接成功消息后创建,为主窗口提供setinit接口完成初始化。视频对话框主要负责视频聊天事件如音量调节,视频窗口大小的布置等工作。且一个客户端只能创建一个视频会话。3.3.3可连接对象模块可连接对象是com技术中处理接口事件的一种方法。本例中,可连接对象实例由主窗口创建,注册到rtc客户端,并为rtc客户端提供调用接口,当rtc客户端有媒体通信事件后,就调用相应的接口进行事件处理。3.3.4文字对话框模块对象实例由主窗口在接受到文字聊天按钮消息后创建,并提供相应接口供主窗口调用来完成初始化。一个文字对话框对应一个im会话,负责完成相应的聊天工作,处理聊天消息和显示。4 软件系统实现4.1模块设计4.1.1服务端设计服务端建立socket对象,建立tcp监听,接收客户端的连接,并负责将客户已连接客户信息发送给其他客户。void cavserverdlg:onnetevent(wparam wparam,lparam lparam)switch(lparam)case fd_accept:accept(socket_listen,null,null);break;case fd_read:onnetread(wparam);break;case fd_write:break;case fd_close:onnetclose(wparam);shutdown(wparam,2);break;default:break;以上为socket事件处理函数,根据不同的事件类型,调用相应的2层处理函数。通信协议:规定接收的字符串第一个字符为“1”:表示用户连接“2”:表示用户断开紧接着为用户昵称,以“”结尾。紧接着为用户ip,同样以“”结尾。规定发送的字符串第一个字符为“1”:表示用户连接“2”:表示用户断开紧接着为用户昵称,以“”结尾。紧接着为用户ip,同样以“”结尾。通信过程:用户与服务器建立socket连接后会向服务器发送用户信息字符串,服务器接收字符串将用户信息显示在主对话框。并根据当前连接用户数目,依次发送该用户信息,同时将其他用户信息发送给该用户。字符串格式按上通信协议格式化。用户与服务器断开过程同上。4.1.2主窗口模块主要变量:int m_messesnum;记录文本会话数。irtcclient * m_pclient;rtc客户端对象。cmessagedlg m_cmdlgs10;文本聊天对话框对象组。cavdlg m_avdlg;视频聊天对话框对象。socket m_s;socket对象。bool m_ifconnect;记录是否连接服务器。bool m_ifavdlg;记录是否已经建立视频聊天。主要函数:void createmdlg(irtcsession *psession,cstring initname);创建文字聊天对话框。void rtceventsschange(irtcsessionstatechangeevent *pevent);会话状态改变事件处理函数。void rtceventmessage(irtcmessagingevent *pevent);消息事件处理函数。void rtceventmedia(irtcmediaevent *pevent);媒体事件处理函数。hresult rtceventhandle(rtc_event enevent, idispatch *pdisp);事件处理总函数,同时供可连接对象调用。afx_msg void onclientmsg(wparam wparam,lparam iparam);socket事件处理函数。hresult ctrydlg:rtcinit()hresult hr;m_pclient=null; hr=coinitialize(null);if(failed(hr)messagebox(com init error!);return hr;hr = cocreateinstance (clsid_rtcclient, null,clsctx_inproc_server, iid_irtcclient,(lpvoid *)&m_pclient);if (failed(hr)messagebox(com o create error!);return hr;hr = m_pclient-initialize();if (failed(hr)/safe_release(m_pclient);messagebox(com init create error!);return hr; m_pclient-setpreferredmediatypes ( rtcmt_all, variant_true );long leventmask = rtcef_session_state_change | rtcef_messaging | rtcef_media | rtcef_intensity | rtcef_client;hr=m_pclient-put_eventfilter(leventmask); if (failed(hr)messagebox(put filter error!);return hr;m_pevent=new myevent;m_pevent-advise(m_pclient,m_hwnd,this);hr=m_pclient-put_listenforincomingsessions(rtclm_both); if (failed(hr)messagebox(put listen error!);return hr;return hr;rtc环境初始化函数,主要做以下工作:创建rtc客户端对象并初始化,设置通信参数,设置过滤事件类型,注册可连接对象,等待连接。4.1.3文字聊天对话框模块主要变量:int m_sesn;记录当前文字会话编号。irtcsession *m_psession;会话对象。cstring m_myname;记录自己昵称。主要函数:void setsesandname(irtcsession *psession,cstring myname,int sesn);传递会话对象,用户名,会话编号。void setmessage(cstring message,cstring messageheader);传递消息。void setinituser(cstring user);初始化用户。void

温馨提示

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

评论

0/150

提交评论