《基于TCP的语音聊天通信系统》.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一、实验综述 1.1 设计目标 网络通信程序使用基于MFC类库中的Socket(套接字)进行编程。通信双方均有各自的套接字,且该套接字与特定的IP地址和端口号相关联。本实验采用基于可靠连接的C/S编程模式,对文字聊天程序进行扩充,在基本框架不变的基础上,增加相应的声音采集和播放的部分,并进行相应修改,从而实现语音聊天通信系统。 1.2 完成功能 (1)建立服务器; (2)连接服务器; (3)文字聊天; (4)语音聊天; (5)双方分别既可作客户端,又可作服务器。 程序界面如下: 图1 语音聊天系统界面 二、系统设计和整体架构 2.1 语音聊天系统功能模块图 图2 语音聊天系统功能模块图 2.2 利用套接字TCP网络通信流程 在TCP/IP协议组中,TCP是一种面向连接的协议,为用户提供可靠的、全双工的字节流服务,具有确认、流控制、多路复用和同步等功能,适用于数据传输。 在使用TCP 协议进行通信时,一般服务端进程先使用socket 调用得到一个描述符,然后使用bind 调用将一个名字与socket 描述符连接起来,对于Internet 域就是将Internet 地址联编到socket 之后,服务端使用listen 调用指出等待服务请求队列的长度。然后就可以使用accept 调用等待客户端发起连接,一般是阻塞等待连接,一旦有客户端发出连接,accept 返回客户的地址信息,并返回一个新的socket 描述符,该描述符与原先的socket 有相同的特性,这时服务端就可以使用这个新的socket 进行读写操作了。一般服务端可能在accept 返回后创建一个新的进程进行与客户的通信,父进程则再到accept 调用处等待另一个连接。客户端进程一般先使用socket 调用得到一个socket 描述符,然后使用connect 向指定的服务器上的指定端口发起连接,一旦连接成功返回,就说明已经建立了与服务器的连接,这时就可以通过socket 描述符进行读写操作了。其服务器通信过程如图3 所示,客户机通信过程如图4所示 图3 服务器通信流程 图4 客户端通信流程 2.3 语音聊天的套接字实现 2.3.1 服务器Socket模块的基本设计 ⑴创建套接字(socket); ⑵将套接字绑定到一个本地地址和端口上(bind); ⑶调用ServerSocket(),创建一个监听的socket; ⑷将套接字设为监听模式,准备接收客户请求(listen); ⑸等待客户请求到来。当请求到来后,接受连接请求,返回一个新的对应于此次连接套接字(accept); ⑹用返回的套接字和客户端进行通信(send/recv); ⑺返回,等待另一客户请求; ⑻关闭ServerSocket(),关闭socket(); 2.3.2 客户端Socket模块的基本设计 ⑴创建一个套接字(socket); ⑵调用ClientSocket()创建一个会话的socket; ⑶调用connect()建立与server端的连接; ⑷和服务器端进行通信(send/recv); ⑸关闭ClientSocket(); 2.4 声音的采集和播放模块的实现 录音的准备工作主要有4点:打开录音设备;获得录音句柄;指定录音格式;分配若干用于录音的缓冲区。开始录音时,先将所有内存块提供给录音设备用来录音,录音设备就会依次将语音数据写入内存,当一块内存写满,录音设备就会发一个Windows消息MM_WIM_DATA给相应的窗口,通知程序做相关处理,这时程序通常的处理方式是把内存中的数据进行复制,如写入文件等。本程序中的处理方式是把数据通过网络发送并且在本地机上播放出来,然后把内存置空,返还给录音设备进行录音,这样就形成一个循环录音过程。结束录音只需要释放所有内存块,并关闭录音设备。播放的流程和录音流程相似,所以不再介绍。 在录音和放音的程序处理中,要特别注意两点。一个是分配的内存的大小和数量。内存的大小与IP电话中语音的连续性和延时性有直接关系,内存越大,则语音的连续性越好,但延时性越差,反之,内存越小,则语音的延时性越小,但连续性越差。内存的数量则与内存的大小和对每个内存的录音数据的处理时间长短有关,一定要保证在录音过程中,录音设备至少有一块内存可供录音,也就是说录满的内存要及时返回,使得循环能够顺利进行。 三、关键模块分析 3.1 程序模块划分 根据关键技术的分析,程序有如下几个模块: (1)负责接收连接的服务器Socket模块:负责该程序作为服务器时的网络端口监听。 (2)负责接收/发送数据的客户端Socket模块:负责对Socket的发送数据和接收数据进

文档评论(0)

weizhuidaomengx + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档