摘要局域网即时聊天通过进行文本聊天和语音聊天来实现彼此沟通、交流信息。
本次局域网即时聊天程序设计主要用了Visual C++编程环境,实现了在LAN中在线用户的文本、语音交互。
在设计里涉及到了网络通信基本原理和Socket编程及语音处理API技术。
由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。
服务器端和客户端是通过建立Socket链接来实现聊天功能。
本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和各模块之间的关系及Socket处理为主说明。
关键词: Visual C++编程环境网络通信基本原理 Socket编程语言处理APIAbstractThe local area network chats immediately through carries on the text to chat with the pronunciation chats realizes each other communication, the exchange information. This local area network chatted the programming mainly to use Visual immediately the C++ programming environment, has realized in LAN the on-line user's text the pronunciation interactiveInvolved in the design to the network correspondence basic principle and the socket programming and the pronunciation processes the API technology. Because the procedure is in TCP Under the IP environment moves, therefore divides the server end and the client side. The server end and the client side are through establishes Socket to link realizes chats the function.This design mainly emphatically chats in the pronunciation the part, mainly between the flow and various modules relations and the socket processing which chats by the pronunciation primarily explained in this paper.Keywords:Visual C++ programming environment network communication fundamentals Socket programming sound API.目录摘要 (2)英文摘要 (3)第一章:绪论 (6)一、背景介绍 (6)二、相关知识 (6)第二章:需求分析 (9)一、可行性分析 (9)二、需求分析 (9)(一)系统功能要求 (9)(二)系统性能要求 (10)(三)系统运行要求 (10)第三章:总体设计 (11)一、层次图 (11)二、各模块的功能及相互关系 (11)第四章:详细设计 (13)一、各模块具体流程 (13)(一)通信模块 (14)(二)声源采集模块 (14)(三)语音数据传输模块 (14)(四)音频再生模块 (15)第五章:代码介绍 (17)第六章:测试 (23)一、模块测试 (23)二、功能测试 (23)三、测试结果 (24)第七章结论 (25)参考文献 (26)第一章绪论一、背景介绍随着网路的出现,它在人们的生活中所扮演的角色越来越多,也越来越重要,人们可以通过这个空间进行网络聊天,实现彼此沟通,交换信息,甚至网络聊天工具在部分人的生活中由于传统的电话通讯手段同等重要的趋势。
尤其现在的学校更是如此,单单在课堂里或校园里的交流是远远不够的,要是学校有聊天系统,那么学生之间或是师生之间的信息交流会更加频繁、更方便,有利于建立友好的关系网。
这次设计不仅能实现文本聊天,还能进行语音聊天,语音聊天是一种最先进的聊天方式,您只要拥有一只麦克风就完全能够加入进来。
你可以无所顾虑无所拘束地进行聊天,免了文字的虚幻。
本次局域网即时聊天程序设计主要用了Visual C++编程环境,设计里还涉及到了网络通信基本原理和Socket编程及语音处理API技术。
由于程序是在TCP/IP环境下运行,所以分服务器端和客户端。
服务器端和客户端是通过建立Socket链接来实现聊天功能。
本次设计主要着重于语音聊天部分,在本次论文里主要以语音聊天的流程和各模块之间的关系及Socket处理为主说明。
二、相关知识(一) Visual C++ 简介Visual C++是一个功能强大的可视化应用程序开发工具,用于Windows环境下32位的应用程序的开发,是计算机界公认的最优秀的应用开发工具之一。
在提供可视化的编程方式的同时,Visual C++也适用于编写直接对系统底层操作的程序,生成代码的质量也优于其它的开发工具。
在Visual C++环境下,利用Microsoft的基本类库MFC(Microsoft Foundation Class Library),可以使用完全的面向对象的方法来进行Windows 95/98/NT应用程序的开发,使得Windows 程序员从大量的复杂劳动中解救出来,体会到真正的程序语言的强大功能和良好的灵活性。
Visual C++编程是一个面向对象的程序设计方法。
同传统的结构化程序设计方法相比,它缩短软件的研制时间,提高软件的开发效率,使程序员可以更好地理解和管理庞大而复杂的程序。
面向对象的程序设计吸取了结构化程序设计的精华,它利用了人们根据对事物分类和抽象的倾向,引入了类和对象的概念,具有封装性(数据抽象)、继承和多态的特点。
与结构化程序设计不同的是,面向对象程序设计是用类抽象代表现实的实体,用类之间的继承关系表示程序设计的抽象过程。
函数只是对数据的操作,没有数据的概念,而类是数据和数据操作的集合,由于面向对象的程序设计方法非常近现实,所以越来越流行。
Visual C++中集成了大量的最新技术,如ActiveX、COM等技术,程序开发人员可以紧紧地把握住软件开发技术发展的方向,开发出功能强大的应用程序。
Visual C++还提供了丰富的技术资源,MSDN(Microsoft Develop Network)提供了强大的联机帮助支持,同时还可以通过访问Microsoft的网上站点来获得最新的技术文档。
(二) Socket及Window Socket API简介套接字(Socket)是一种双向的通信接口,可以通过这个端口与任何一个具有Socket端口的计算机通信,套接字是网络通信的基础。
Socket在Windows以句柄的形式被创建。
使用Socket进行网络通信必须包含下面的几种信息:双方认可的协议,本地主机的IP地址,本地进程的协议端口,对方主机的IP地址,对方进程的协议端口。
Socket可分为: 1] 数据报套接字(Datagram Sockets)——对于在TCP/IP 上实现的WinSock,数据报套接字使用用户数据报协议(UDP)。
数据报套接字提供了一种不可靠的、非连接的数据包通信方式。
2] 流式套接字(Stream Sockets)——流式套接字使用传输控制协议(TCP)。
流式套接字可以将数据按顺序无重复地发送到目的地,它提供的是一种可靠的、面向连接的数据传输方式。
不管是对单个的数据报,还是对数据包,流式套接字都提供了一种流式数据传输。
VC++对网络编程的支持有socket支持,Winlnet支持,MAPI和ISAPI支持等。
其中Windows Sockets API是TCP/IP网络环境里,也是Internet上进行开发最为通用的API。
最早美国加州大学Berkeley分校在UNIX下为TCP/IP协议开发了一个API,这个API就是著名的Berkeley Socket接口(套接字)。
在桌面操作系统进入Windows时代后,仍然继承了Socket方法。
从表一可以看出,主要的WinSock API函数有哪些。
(三) MFC Socket编程技术MFC是对API的封装,MFC针对WinSock API封装了两个类:CAsyncSocket 和Csocket。
因此,使用这两个类进行Socket网络程序的编写会比使用API方便一些。
MFC中Socket相关类的继承关系如下图:[图1] MFC中Socket相关类的继承关系CAsyncSocket对WinSock API进行了较低程度的封装,缺省情况下建立的Socket是异步操作方式,即非阻塞的,因此一些阻塞操作,需要自己动手完成。
另外,由于它对API的封装程度不高,以前在WinSock API中需要自己完成的工作(比如:字节顺序的转换),仍然需要自己完成。
当然有许多程序员喜欢使用该类甚至WinSock API,原因是这些方法具有很大的灵活性,给程序员以较大的发挥空间。
为了给程序员提供更方便的接口以自动处理网络通信中的一些任务,MFC在CAsycnSocket类的基础上派生了CSocket类,它提供了比CAsyncSocket更高层的WinSock API接口。
CSocket的网络操作是同步方式,即阻塞式的。
CSocket 建立的Socket不是阻塞的,而是对非阻塞的Socket进行处理后实现的阻塞操作。
在阻塞任务执行过程中,Windows线程的消息循环仍然有效,也就是说CSocket 类的阻塞操作不影响Windows的消息循环。
第二章需求分析在这里先说明设计的需求分析之前分析一下设计的可行性。
可行性分析的目的是为了用最小代价在最短时间内确定问题是否能够解决。
可行性分析的实质就是要进行一次压缩简化系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。
一、可行性分析1)技术可行性:本系统以Visual C++为主要编程环境,再结合网络通信基本原理和Socket编程及语音处理API技术,技术成熟,可行。
2)经济可行性:这个系统开发开发成较低,经济效益会远大于开发成本,可行。
3)操作可行性:系统硬件为PC机,软件为Windows NT/2000,而且编程环境Visual C++为专业程序员使用工具,比较易于使用,可行。