ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:138.69KB ,
资源ID:17113787      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17113787.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(局域网即时聊天程序的设计及实现.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

局域网即时聊天程序的设计及实现.docx

1、局域网即时聊天程序的设计及实现局域网即时聊天程序的设计与实现作 者 院 系 专 业 年 级 学 号 指导教师 答辩日期 成 绩 摘 要局域网即时聊天通过进行文本聊天和语音聊天来实现彼此沟通、交流信息。本次局域网即时聊天程序设计主要用了Visual C+编程环境,实现了在LAN中在线用户的文本、语音交互。在设计里涉及到了网络通信基本原理和Socket编程及语音处理API技术。由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。服务器端和客户端是通过建立Socket链接来实现聊天功能。本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和各模块之间的关系及Socket处理为主说

2、明。关键词: Visual C+编程环境 网络通信基本原理 Socket编程 语言处理API 摘要 .2英文摘要 .3第一章:绪论 .6一、背景介绍 .6二、相关知识.6第二章:需求分析 .9一、 可行性分析.9二、 需求分析 . 9(一) 系统功能要求 .9(二) 系统性能要求 .10(三) 系统运行要求 .10第三章:总体设计 .11一、 层次图 .11二、 各模块的功能及相互关系 . 11第四章:详细设计 .13一、 各模块具体流程 .13(一) 通信模块 .14(二) 声源采集模块.14(三) 语音数据传输模块.14(四) 音频再生模块. 15第五章:代码介绍 .17第六章:测试 .2

3、3一、模块测试 .23二、功能测试 .23三、测试结果.24第七章 结论.25参考文献 .26 第一章 绪论一、背景介绍 随着网路的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要,人们可以通过这个空间进行网络聊天,实现彼此沟通,交换信息,甚至网络聊天工具在部分人的生活中由于传统的电话通讯手段同等重要的趋势。尤其现在的学校更是如此,单单在课堂里或校园里的交流是远远不够的,要是学校有聊天系统,那么学生之间或是师生之间的信息交流会更加频繁、更方便,有利于建立友好的关系网。这次设计不仅能实现文本聊天,还能进行语音聊天,语音聊天是一种最先进的聊天方式,您只要拥有一只麦克风就完全能够加入进来。你

4、可以无所顾虑无所拘束地进行聊天,免了文字的虚幻。本次局域网即时聊天程序设计主要用了Visual C+编程环境,设计里还涉及到了网络通信基本原理和Socket编程及语音处理API技术。由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。服务器端和客户端是通过建立Socket链接来实现聊天功能。本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和各模块之间的关系及Socket处理为主说明。二、相关知识(一) Visual C+ 简介Visual C+是一个功能强大的可视化应用程序开发工具,用于Windows环境下32位的应用程序的开发,是计算机界公认的最优秀的应用开发工具之一

5、。在提供可视化的编程方式的同时,Visual C+也适用于编写直接对系统底层操作的程序,生成代码的质量也优于其它的开发工具。在Visual C+环境下,利用Microsoft的基本类库MFC(Microsoft Foundation Class Library),可以使用完全的面向对象的方法来进行Windows 95/98/NT应用程序的开发,使得Windows程序员从大量的复杂劳动中解救出来,体会到真正的程序语言的强大功能和良好的灵活性。Visual C+编程是一个面向对象的程序设计方法。同传统的结构化程序设计方法相比,它缩短软件的研制时间,提高软件的开发效率,使程序员可以更好地理解和管理庞

6、大而复杂的程序。面向对象的程序设计吸取了结构化程序设计的精华,它利用了人们根据对事物分类和抽象的倾向,引入了类和对象的概念,具有封装性(数据抽象)、继承和多态的特点。与结构化程序设计不同的是,面向对象程序设计是用类抽象代表现实的实体,用类之间的继承关系表示程序设计的抽象过程。函数只是对数据的操作,没有数据的概念,而类是数据和数据操作的集合,由于面向对象的程序设计方法非常近现实,所以越来越流行。Visual C+中集成了大量的最新技术,如ActiveX、COM等技术,程序开发人员可以紧紧地把握住软件开发技术发展的方向,开发出功能强大的应用程序。Visual C+还提供了丰富的技术资源,MSDN(

7、Microsoft Develop Network)提供了强大的联机帮助支持,同时还可以通过访问Microsoft的网上站点来获得最新的技术文档。(二) Socket及Window Socket API简介 套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。Socket在Windows以句柄的形式被创建。使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,本地进程的协议端口,对方主机的IP地址,对方进程的协议端口。 Socket可分为: 1 数据报套接字(Datagram Sock

8、ets) 对于在TCP/IP上实现的WinSock,数据报套接字使用用户数据报协议(UDP)。数据报套接字提供了一种不可靠的、非连接的数据包通信方式。 2 流式套接字(Stream Sockets) 流式套接字使用传输控制协议(TCP)。流式套接字可以将数据按顺序无重复地发送到目的地,它提供的是一种可靠的、面向连接的数据传输方式。不管是对单个的数据报,还是对数据包,流式套接字都提供了一种流式数据传输。 VC+对网络编程的支持有socket支持,Winlnet支持,MAPI和ISAPI支持等。其中Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通

9、用的API。最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。在桌面操作系统进入Windows时代后,仍然继承了Socket方法。从表一可以看出,主要的WinSock API函数有哪些。表1 WinSock API函数函数功能WSAStartup()连结应用程序与 Windows Sockets DLL 的第一个函数WSACleanup()结束 Windows Sockets DLL 的使用socket()建立Socketclosesocket()关闭某一Socketbind()将一本地地址与一

10、个SOCKET描述字连接在一起listen()设定 Socket 为监听状态,准备被连接accept()接受某一Socket的连接要求,以完成面向连接的客户端 Socket 的连接请求。connect()要求连接某一Socket到指定的网络上服务端recv()从面向连接的 Socket 接收信息send()使用面向连接的 Socket 发送信息WSAAsyncSelect()要求某一 Socket 有事件 (event) 发生时通知使用者 (三) MFC Socket编程技术 MFC是对API的封装,MFC针对WinSock API封装了两个类:CAsyncSocket和Csocket。因此,

11、使用这两个类进行Socket网络程序的编写会比使用API方便一些。 MFC中Socket相关类的继承关系如下图:图1 MFC中Socket相关类的继承关系 CAsyncSocket对WinSock API进行了较低程度的封装,缺省情况下建立的Socket是异步操作方式,即非阻塞的,因此一些阻塞操作,需要自己动手完成。另外,由于它对API的封装程度不高,以前在WinSock API中需要自己完成的工作(比如:字节顺序的转换),仍然需要自己完成。当然有许多程序员喜欢使用该类甚至WinSock API,原因是这些方法具有很大的灵活性,给程序员以较大的发挥空间。为了给程序员提供更方便的接口以自动处理网

12、络通信中的一些任务,MFC在CAsycnSocket类的基础上派生了CSocket类,它提供了比CAsyncSocket更高层的WinSock API接口。CSocket的网络操作是同步方式,即阻塞式的。CSocket建立的Socket不是阻塞的,而是对非阻塞的Socket进行处理后实现的阻塞操作。在阻塞任务执行过程中,Windows线程的消息循环仍然有效,也就是说CSocket类的阻塞操作不影响Windows的消息循环。第二章 需求分析 在这里先说明设计的需求分析之前分析一下设计的可行性。可行性分析的目的是为了用最小代价在最短时间内确定问题是否能够解决。可行性分析的实质就是要进行一次压缩简化

13、系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。一、可行性分析1) 技术可行性:本系统以Visual C+为主要编程环境,再结合网络通信基 本原理和Socket编程及语音处理API技术,技术成熟,可行。2) 经济可行性:这个系统开发开发成较低,经济效益会远大于开发成本,可行。3) 操作可行性:系统硬件为PC机,软件为Windows NT/2000,而且编程环境Visual C+为专业程序员使用工具,比较易于使用,可行。二、 需求分析需求分析的基本任务是准确的回答“系统必须做什么?”这个问题。这一阶段是对系统认识最为全面、准确、清晰、得体的一个比较关键的时期。而

14、且需求分析的结果是系统开发的基础,关系到工程的成败和软件产品的质量。因此,必须用行之有效的方法对软件需求进行严格的审查验证,为下一步的总体设计打好基础。(一) 系统的功能要求在线朋友指的是在所有使用本系统在局域网上进行信息传递的用户。局域网中在线用户之间的聊天包括文本聊天及语音聊天。文本聊天就是在线双方互相传递文本信息的功能,而语音聊天就是指在线双方互相传递语音信息的功能。下面是文本聊天部分所要完成的功能。1)在这个系统中只要在线就可以和所有使用此系统的已经在线的朋友进行聊天,并且为不同的朋友提供不同的聊天窗口,也就是说和10个在线人员聊天的话就得有10个聊天窗口打开。2)与特定用户之间的聊天

15、窗口中必须提供聊天信息的输入和聊天信息的显示功能。3)要发送给对方的文字或字符的输入工作要在聊天窗口的输入框中完成。4)当输入完聊天信息以后进行发送,当发送没有结束时,不能进行新的聊天内容的输入。一般聊天内容一次不能超过500个字符。5) 聊天信息要显示在聊天窗口中,显示的内容包括:发送信息、接收信息。发送信息是指自己发送给对方的信息,即发送内容;接收信息是指来自对方的信息,这里显示接收到的内容。以下是语音聊天部分要完成的功能。6)在聊天窗口以建立的基础上,建立与服务器端的连接。7)与对方连接以后开始语音聊天。8)想结束语音聊天时,按结束键就能与对方断开连接,即结束语音聊天。(二) 系统性能要

16、求a. 时间性能要求:在实际应用中由于客户端的大量频繁的访问,服务器响应时间应该尽可能缩短,对于有特殊需求的应用,还要求达到实时响应。b. 存储性能要求:根据应用中的实际情况配置适当容量的存储设备,特别是音频存储设备容量方面要适当得配置。c. 稳定性安全性要求:要求软件尽可能的稳定,对于一般的应用系统,对安全性要求不高,对于特殊的应用,还需要在安全性方面加以保证,所以要相应提高服务器端的配置。(三) 系统运行要求服务器端: 用于接收/转发数据。在本系统中服务器端本身也可以是客户端。客户端 : 多个PC机,通信用,作为文字及音频数据发生端。第三章 总体设计经过了需求分析阶段的工作,系统必须“做什

17、么”的问题已经清楚了,现在是决定“怎么做”的时候了。总体设计的基本目的就是回答“系统应该如何实现?”这个问题。在这里要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。在需求分析里也已经说明了对于局域网即时聊天程序的设计过程主要由在线朋友文本聊天功能和语音聊天功能。由于语言聊天是发送声音的一端将硬件接口采集到的声音数据通过Socket发送到另外一端,另外一端根据得到的声音数据调用硬件接口播放声音,所以其核心是声音数据的采集、播放和声音数据的网络传输。一、 层次图根据本次设计需要,把整个即时聊天系统分成文本聊天部分和语音聊天部分。文本聊天部分主要由文字输入及发送、聊天记录保存、接收

18、文字信息等三个模块分成。语音聊天部分则由四个模块分成。即通信模块、声源采集模块、声音数据传输、音频再生模块。 图2 本次设计的层次图二、 各模块功能及相互关系由于设计本身着重于语音聊天部分,所以在这里就针对这部分进行说明。1. 通信模块:主要功能是接收并连接服务器端和客户端接口,负责作为服务器 时的网络端口监听,并且为客户端接口的发送数据和接收数据进行消息处理。为文本发送与接收及语音交互奠定了基础。2. 声源采集模块:主要功能为负责采集客户端发出的声源,把采集到的声源放到缓冲区里,为语音传送建立了基础。3. 声音数据传输模块:主要功能是把采集到的声源进行保存及传送,一旦传送到就把内存置空,返还

19、到录音设备进行录音,它为音频再生模块提供语音数据。4. 音频再生模块;主要功能是接收声音数据传输模块传送过来的语音数据进行放音并且释放内存以便于保存采集到的声源。这模块为接收方的客户端提供了音频数据,使语音交互顺利进行。5. 至于文字输入模块及输出模块是为通行模块提供了文本数据,并通过通信模块进行两个客户端之间的文本交互。在这里特别要注意的是录音和播放的程序处理中要特别注意分配内存的大小和数量,一定要保证在录音过程中录音设备至少有一块内存可供录音,使得循环能够顺利进行。第四章 详细设计详细设计阶段的根本任务是确定应该怎样具体地实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出对目标系

20、统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。系统运用共享数据结构技术及多线程技术,通过I/O端口与用户端连接,实现了数据转发功能。首先,程序初始化网络,接着客户端连接到服务器时,创建接收线程和发送线程,这样就可以实现数据转发。最后,当用户断开连接时,服务器关闭与他的连接,并结束相应的线程。在开始进行聊天通信前得先把系统初始化,系统的初始化过程为: N Y 图3 系统初始化流程图当系统完成初始化过程以后就可以进行具体聊天通信了(即文本交互和语音交互)。一、各个模块的具体流程当用户登陆到系统后会出现一个聊天窗口,建立服务器端和客户端连接以后就可以开始进行文本聊

21、天了,用户把聊天内容输入到聊天信息输入框以后发送聊天内容,这时系统会自动把聊天内容保存起来并显示在聊天记录窗口中,聊天记录包括发送和接收的聊天信息。以下则是语音聊天的几个模块具体流程。(一) 通信模块 进行聊天需要建立服务器端Socket和客户端Socket,并且要连接上,这样才能进行信息的传送,通信模块主要定义的就是这部分Socket建立和连接。 N Y N Y图4 服务器端的Socket建立和连接 图5 客户端的Socket建立和连接(二) 声源采集模块用户按语音聊天开始键以后,就开始音频聊天,要进行语音数据传送,就得有声源采集模块。声源采集模块的主要流程为采集到声源以后把语音数据放到缓冲

22、区里。(三) 声音数据传输模块声源采集模块放到缓冲区里的语音数据经过这个模块以后到达音频再生模块。在这里采集到的声源数据并不能保证完全被保存并进行传送,因为可能会出现声源数据量如果多于录音内存量的话就不能进行保存,而要等待经过音频再生模块并释放出来的内存,然后再进行保存。 N Y N Y图6 声音数据传输模块流程图(四) 音频再生模块经过处理过的语音数据通过音频处理模块传送到这个模块,当接收到语音数据以后它将经过录音的语音数据进行放音,然后把内存释放出来以备保存其他缓冲区里保存的声源信息。为什么要释放内存呢?那是因为声音数据具有很强的前后相关性,数据量大、实时性强,又由于声音是连续的,通常把其

23、称之为连续型时基媒体类型。当缓冲区接收到声源以后要是内存不够的话就不能及时把全部语音数据保存并传送,所以经过这个模块以后就得把录音内存释放掉,好让上一个模块及时得到完成。 图7 音频再生模块流程图 经过这个模块才能算是真正完成了语音聊天了,如果想结束聊天只要断开与对方的连接即可。 第五章 关键代码分析 经过总体分析和详细分析,整个设计有了大概的框图之后就可以进行编程了。编程的质量直接影响到运行结果,所以要做到远程序代码的逻辑简明清晰、易读易懂是程序好坏的一个重要标准,其中适当的注解是非常重要的。 本次设计的特点是一个用户端既是服务器端也是客户端,所以针对一个用户端作为服务器端或者作为客户端的时

24、候的代码进行分析。一、 服务器端对客户端Socket的处理代码 void CChatDlg:ProcessPendingAccept() CclientSocket* pSocket=new CclientSocket(); If (m_pListenSocket.Accept(*pSocket) Cmessg msg; Msg.m_strText=“一个游客进入聊天室了”; M_sShowString+=“一个游客进入聊天室了n”; POSITION pos; For(pos=m_connectionList.GetHeadPosition();pos!=NULL;) CclientSock

25、et * t=(CclientSocket *)m_connectionList.GetNext(pos); t-SendMessage(&msg); pSocket-Init(this); m_connectionList.AddTail(pSocket); else delete pSocket;二、客户端连接到服务器端时消息处理代码 void CChatDlg:OnConnecserver() /TODO:Add your control notification handler code here if(!m_bInit) BYTE f0,f1,f2,f3; Cstring name; (CIPAddressCtrl*)(GetDlgItem(IDC_IPADDRESS)-GetAddress(f0,f1,f2,f3); Cstring ip; Ip.Format(“%d.%d. %d. %d,f0,f1,f2,f3); M_bClient=true;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2