欧道杰,段元梅
(湖南科技学院 信息工程学院,湖南 永州 425199)
随着Internet 的迅速发展,计算机在各个领域应用相当广泛,已是不可或缺的工具。通信软件作为一种新型的通信和交流工具,突破了地域的限制,可以提供更为便捷、灵活、全面的信息传递和服务,具有极其广泛的发展前景。本文旨在开发一款方便网络用户之间进行文字、表情等交流的通信系统。可以通过通信软件结交各个层次的朋友,从而为自己获取更多的知识和社会阅历[1]。
用户可通过该即时通信软件的客户端实现以下功能:(1)注册功能:用来提交用户的相关资料,从而获得一个用于登录系统的用户账号;(2)登录功能:用来建立与服务器的连接,验证用户信息并登录,显示登录出错信息;(3)界面显示功能:用来显示所有好友的在线状态和个人信息;(4)添加好友功能:用来处理用户之间的好友添加请求,并对添加好友请求做出相应的响应;(5)加密通信功能:用来添加好友,成功后,好友之间进行文字聊天、文件传输等加密通信[2]。
该即时通信系统的服务器端用来接收来自客户端的各种信息,并对接收的信息做出相应处理。服务器通过信息接收功能来接收客户端发送的信息;登录处理功能是服务器通过验证登录信息,并给出相应处理;好友添加处理功能是服务器将用户的好友信息写入数据库的操作;用户退出处理功能是服务器在用户退出即时通信软件后,将此用户下线消息发给各客户端,并改写用户在服务器端的状态[3-4]。
该系统需要一个方便用户使用的个性化界面。第一次使用该系统的用户通过填写个人资料来注册,服务器返回一个注册账号用于之后的登录。已经注册的用户输入账号和密码,验证登录信息,若正确则登录主界面。在线用户通过查看所要添加好友的个人信息,并向好友发送请求信息,好友通过验证后,向请求方发送响应消息。请求方添加完成后,把相关信息存入数据库的好友表中。如果好友双方同时在线,即可进行通信。
该即时通信系统采用C/S 模式设计,主要包括客户端、服务器。客户端提供用户注册账号、用户登录、用户添加好友及对方响应、好友之间通信等服务。服务器用来对注册登录的用户进行管理以及对客户端发送的请求信息做出相应处理。服务器与客户端之间采用UDP 协议进行可靠通信,可以大幅度减少因多客户端给服务器带来的压力。多个请求通信的客户端之间使用UDP 通过服务器中转进行通信。该通信软件包含了用户注册模块、用户登录模块、添加好友模块、加密通信模块、服务器模块。
通信层在服务器中非常重要,它的功能是接收客户端发送的数据,并将数据传输给上层服务。服务器相对于客户端来说,需要承受非常大的压力。客户端有千千万万,但服务器只能有一个,对于通信层来说,将会是一个非常大的压力。因此,不能像普通通信那样,直接在主线程建立一个Socket,然后等待接收。当很多客户端连接服务器时,服务器可能会崩溃。为解决这个问题,笔者为数据的接收和发送开辟一个通信线程,让该线程专门用来发送和接收数据。为了让通信线程更流畅,笔者将接收和发送的数据放到另一个线程来处理,这个线程叫数据处理线程。
2.4.1 通信层的设计与实现
通信层是客户端的底层,用来实现与服务器的数据通信。它和服务器的网络层功能一样,只是客户端和服务器端所承受的压力不同,所以在客户端的通信层中,笔者删减了完成端口模型的使用。
2.4.2 中间层的设计与实现
中间层是承上启下的一层,它是通信层和应用层的一个缓冲层。由于应用层中有很多的UI 界面设计,因而使得应用层和通信层的数据在类型方面存在差异,数据也很难直接进行传送。中间层在应用层和通信层中间进行数据的转换和传递,为应用层和通信层搭建了一座桥。中间层将应用层传来的数据进行处理后传给通信层,将通信层的数据处理后传给应用层。为了能让底层(通信层)的数据送达给上层(应用层),笔者在程序中使用了回调机制,可以很方便地解决从底层给上层发送数据。
2.4.3 应用层的设计与实现
(1)UI 界面设计与实现。
客户端的UI 界面是基于MFC 框架开发,加入了DUI 的设计思想,对窗口中的很多原始控件进行自绘,使界面既符合设计要求,又比较美观。在主界面中对CListCtrl 控件自绘,让它能显示好友的需求,在好友界面中显示更多的信息。对CButton 控件进行自绘,让按钮显得更为美观也能适应更多情况的使用。
(2)硬性功能设计与实现。
用户注册、用户登录、信息展示、好友管理、分组管理、好友聊天等这些是一个通信软件必不可少的功能,称之为硬性功能。这些硬性功能都和UI 界面有着很大的关联,要么是从UI 层获取数据,要么是将数据在UI 层显示。
信息展示是一个扇形的模块,它在各个功能模块中都有出现。基本原理是将数据和UI 结合,最后以用户能够接受的方式展示出来。以往这个模块,在显示数据时,大多数都是等整个数据都加载完后再显示。而本模块是边加载边显示,即来多少显示多少,这会让用户感觉到传输速度有了提升。当然这种模式和底层数据编码有关。在底层数据编码和在上层数据显示中,将整个大的模块的数据分成N个小的结点。这种方式有利于传输和显示,底层不用等数据传输完就可以发给上层,上层展示模块也不用等整个数据接收完再显示,即可边传输边显示,让用户感觉更流畅。
好友聊天是本软件的核心模块,是用户进行聊天的模块,用户通过此功能和好友进行聊天通信。本软件还对聊天消息进行了处理,支持表情显示和发送。该系统的聊天模块流程是,当用户输入信息点击发送后,系统获取用户输入的数据,经过中间层对数据进行处理,然后交由底层发送给服务器,由服务器转发给好友,最后在好友聊天窗口中显示。
该系统测试主要围绕功能测试、模块测试和确认测试进行。注册与登录模块的测试主要是测试网络的连通性、数据可靠性以及信息的正确性等。信息展示模块主要是测试能否正确显示相关信息。好友聊天模块主要测试其数据是否能顺利到达对方及顺利显示。登录与主窗口模块测试从登录窗口能否顺利地转到主窗口,两者之间有没有出现由于接口问题的信息乱码现象。
本文对通信系统的设计思想进行了革新,从软件框架入手设计软件,从大局着想,为以后的软件设计与开发奠定了基础。本文还利用Socket 技术解决软件的通信问题,并在Socket 的基础上使用完成端口模型来解决因高并发量而给服务器带来的压力。