聊天程序模块的实现原理研究

来源 :现代商贸工业 | 被引量 : 0次 | 上传用户:slippers3000
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:聊天程序模块主要是负责程序的通信,是数据传输的基础,其本质就是在数据的通信双方发送和接收数据,主要介绍了普通聊天程序中最主要的聊天模块的实现原理。
  关键词:聊天程序;通信;数据传输
  中图分类号:TB文献标识码:A 文章编号:1672-3198(2012)12-0166-01
  聊天程序是Socket网络编程的基本应用形式之一,其本质就是在数据的通信双方发送和接收数据,然后利用VC++6.0中的CSocket来编写基于UDP协议的局域网聊天程序。
  1 聊天软件模块的通信模型
  首先,介绍两台计算机通信模型,即聊天程序基本的模型。其中一台是客户机,另一台是服务器,所有必需的软件都装在客户机上。这样,客户机就可以进行电子邮件的发送和接收,浏览网页或者从FTP服务器上下载相关文件,这些软件共存于同一台计算机中并且彼此之间相互不影响。而另一种软件则安装在服务器上,这种软件主要是向远程客户端计算机提供相应的服务。服务器可以同时响应多个客户计算机的请求,或者是能够在同一个时间处理过多个来自客户机的请求。
  再者,由于Socket技术使得可以同时稳定运行几个Internet应用程序成为了可能。Socket是个程序设备,它允许用户通过TCP/IP端口为某个网络应用程序接收或者发送数据。程序根据需要产生足够数量的Socket,但是每一个Socket必须对应一个TCP/IP端口。客户机产生一个Socket并随机分配它一个TCP/IP端口,该Socket就利用该端口进行工作。但是在服务器端,不是这样的工作,服务器的应用程序需要预先定义好的TCP/IP端口来工作的,比如:FTP服务器的端口号是21,WWW服务器的端口号是80等等。
  最后,本程序主要的数据传播形式是局域网广播,对于TCP/IP实现来说,要想实现局域网内的广播通信,首先必须设置好子网掩码和广播地址,这样底层网络才能够接收到广播信息。现行的TCP/IP是通过IP地址来对计算机进行识别的,IP地址分为标示网络的网络标识编码和标识网络内惟一主机的主机标识编码两部分。子网掩码是IP地址中对应网络标识的编码各位为1,对应的主机标识编码的各位是为0的一个4字节数;广播是主机标识编码为全1的IP地址。此程序并不是严格意义上的广播,只是运用了IP单播的概念,对信息进行复制重复发送。
  2 CSocket网络编程的基本原理
  CSocket继承了CAsyncSocket,是Windows Socket API的高层抽象,CSocket通常和CSocketFile以及CArchive类混合使用,这两个类主要负责数据的发送和接收。
  CSocket提供了阻塞式的访问方式,这一点对于CArchive的同步操作来说是必需的。类成员的阻塞函数,例如Receive()、Send()、RecerveFrom()、SendTo()和Accept()不会像Windows中的函数一样返回WASEWOULDBLOCK的错误。取而代之的是,这些函数会自己等待直到操作完成。如果在这些阻塞函数正在等待的时候,应用程序调用了CancelBlockingCall函数,那么这些阻塞函数将会完成等待并返回WSAEINTR的错误。
  要使用CSocket对象,首先调用构造函数,然后调用Create函数创建一个Socket句柄。Create函数取胜创建一流Socket,如果没有使用CArchive类,那么还可以创建一个数据报Socket。服务器端调用Accept,客户端调用Connect,然后创建一个CSocketFile去关联CSocket。下一步就可以创建一个CArchive对象关联CSocketFile,用来发送和接收数据。
  3 聊天模块实现
  首先定义集成于CSocket类的两个子类CServerSocket和CClientSocket,其中CServerSocket类用于服务器端,最主要的功能是重载CSocket类的OnAccept函数来接受客户端的连接请求,在此函数中可直接编写对接收到的连接请求的处理代码,也可以调用别的类中对连接请求的处理函数:CClientSocket类是一个会话Socket,在此类中结合CArchive和CSocketFile进行串行化,定义两个CArchive类的对象m_aSessionIn和m_aSessionOut及CSocketFile对象m_sfSocketFile,将CArchive对象关联到CSocketFile对象,m_aSessionIn用于信息接收,m_aSessionOut用于信息的发送。CClientSocket类重载OnReceive函数勇于接受对方发送的数据,即对方的聊天内容,数据存储于m_aSesionOut,使用m_aSessionOut->Flash()函数将数据写入发送缓存,准备向对方发送。这两个CSocket子类已经包含进行聊天所需要的全部功能
  最后是在主程序中进行组织。在主程序中定义CServerSocket类和CClientSocket类的对象,然后根据以上对这两个类的分别调用响应函数完成相应功能。
  其中,关于聊天程序的中断开连接和错误处理进行特别的说明,因为这两部分对于整个系统调试和运行都非常重要。
  关于错误的处理,主要是针对调试时可能出现的错误的预先分析,能够在程序出现相关编译错误时,知道哪里出现编程错误。同时,也能够对于一些常见错误进行处理,使得程序更加的完善。一共有两种需要注意的错误。一种是应用的协议的错误,当使用了不正确的命令就会产生这个错误,可以从服务器返回的消息代码中得之此类的错误。另一种错误是Csocket错误,对于这类错误,Csocket类就会产生一个Error事件,可以调用一个函数进行对此种的错误的处理。
  4 结语
  聊天程序模块作为聊天程序中最重要的模块,负责整个系统的通信功能,其模块程序的完整性、严谨性是比较重要的,如何对其通信原理进行完善是今后软件开发的方向。
其他文献
发动机是汽车的主要部件之一,发动机的工作状况会直接影响车辆的运行效率。如今,人们对汽车整体质量的要求越来越高,人们会重点关注发动机的实际运行情况。汽车发动机制造过
基于凯恩斯消费理论,运用重庆市1985——2009年的数据,在对重庆市农村居民人均消费——收入关系进行协整检验的基础上,建立了误差修正模型,并得出了实证研究结果。结果发现:短期内
建筑工程配电系统施工是一项系统工程,它是工程建设质量与完善的基本保证。近年来随着社会经济的发展,建筑工程的用电器日益增多,工作生活中对电器的依赖性日益增强,用电负荷逐年
<正> 一、蒸汽供热与高温水供热技术经济比较北票台吉竖井是年产60万吨的扩建矿井.据初步设计,该矿初期空气加热和采暖热负荷约450万千卡/小时,确定采用高温水供热,利用已到
2018年,安徽省合肥市紧紧围绕建设现代社会组织管理体系目标,以改革创新为动力,以培育发展为重点,以规范管理为抓手,强化社会组织监管水平,提高社会组织建设质量,引导全市社
本文结合湖南农业大学工程管理专业教学实习基地的建设情况,对基地建设过程中存在的问题进行了分析,并提出了针对性的建设措施建议。
糖尿病肾病是糖尿病的严重并发症,病情复杂多变,做好护理工作尤其是饮食工作至关重要.作者通过对16例该病患者的临床护理实践,详细地阐述了该病的饮食护理的特点及需要注意的
一般来说,公司内部人会比外部人更早、更容易地获得本公司信息。这样,内部人在有效市场中交易本公司股票时,会较外部人员具有优势,并能获得超额收益。以我国上市公司内部人交
本文通过分析我国民族地区远程培训网络的重要性,提出必须发展远程培训网络,规划了地区。县、乡镇、牧区,社区基层站点现代远程教育网络模式;探讨了远程培训同络在民族地区实旄的
【正】 理由同志反映剑坛勇将栾菊杰事迹的《扬眉剑出鞘》是一篇优秀的报告文学作品。它最先发表在《体育报》,迅速被《人民日报》所转载,在一九七七———一九八○年报告文