《2021-2022年收藏的精品资料企业即时通信系统客户端的设计与实现.doc》由会员分享,可在线阅读,更多相关《2021-2022年收藏的精品资料企业即时通信系统客户端的设计与实现.doc(60页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要西安电子科技大学学士学位论文企业即时通信系统The Enterprise Instant Messaging学院: 软件学院 专业: 软件工程 班级: 130912 姓名: 导师: 摘要随着网络通信技术的发展,网络已经成为人们获取信息,交流信息以及管理信息的重要途径。其中即时通信的出现无疑是网络通信领域的一场革命,他使人们能够随时随地的同任何地方的人进行快捷的交流。如今,网络即时通信已经逐步发展成为应用于各行各业的信息交流工具。本论文通过设计和实现一款集即时通信与内部组织管理于一体的企业内部即时通信系统,讨论并分析在TCP/IP协议的基础上设计并实现一个C/S结构的即时通信系统的详细过程。
2、首先,介绍即时通信系统的现状,其次,分析和设计客户端与服务器端之间的通信协议,为上层的数据包交换以及系统功能实现模块提供规范的数据交流格式。然后,对系统中最重要的部分即数据包模块,进行详细的设计说明以及实现方案的阐述,最后,描述即时通信系统整体的系统功能的逻辑处理流程,以及实现过程。在当前这个信息时代,由于企业即时通信系统为公司提供的便捷的员工交流方式以及规范的公司组织管理功能,所以即时通信系统的设计与实现在各行各业中具有非常广泛的应用前景。关键词:即时通信 企业应用程序 TCP/IP C/SAbstractAs the widespread of web application, inter
3、net has become the indispensable tool for information acquisition,communication and management. The advent of real-time communication has brought people great convenience as well as saving time and money. Nowadays, web-based real-time communication has been developed to a communication tool for many
4、 fields.Analyzes and discuss the process of designing and implementing a real-time communication system of C/S structure based on TIP/IP protocol, through designing and implementing a network application combined the functions of instant communication tool and also a personnel management tool. First
5、, to introduce some necessary technical knowledge and the functional designing、system structure module designing and data information designing of development of the IM system. Second, analyze and design the communication protocol between Client and Server of the system to regular the data transport
6、ation process between ports. Third, describe the designing and implementation of the most important part of the system which is the web transportation controlling module. Finally, introduce the logic processing of the whole IM system and some client programs or code which have passed the testing of
7、server program.Designing and implementing of IM system has a definite applying prospect in the aspect of building an interior and own application which gather instant messaging and information managing.Key words:Instant Messaging Enterprise Application TCP/IP C/S目录目录摘要1Abstract2目录1第一章 绪论11.1课题背景和意义1
8、1.2企业即时通信系统11.2.1概念11.2.2主要功能21.2.3主要应用领域21.2.4企业即时通信系统现状31.3论文的主要工作和章节安排3第二章 企业即时通信系统需求分析52.1企业即时通信系统的需求分析52.2企业即时通信系统的用例说明52.3企业即时通信系统的功能描述5第三章 通信模块93.1企业即时通信系统的通信协议93.1.1数据收发方式的设计和数据包结构的定义93.1.2通讯协议数据包在实现过程中的定义113.1.3本节小结163.2数据包传输模块的设计与实现163.2.1套接字的模型选择和多线程的运用163.2.2数据包传输模块的设计183.2.3数据包传输模块的实现19
9、3.2.4本节小结21第四章 业务逻辑模块234.1引言234.2登陆234.2.1登陆设置234.2.2登陆254.3主界面264.3.1组织结构264.3.2群组列表284.3.3公告列表294.4点对点通信304.4.1发送信息304.4.2传输文件324.5群组会议334.5.1创建群组334.5.2邀请员工加入群组354.5.3将员工移除群组364.5.4群组聊天374.5.5上传共享文件384.5.6下载共享文件404.6日常公告管理414.6.1发布公告424.6.2删除公告434.6.3查看公告评论444.6.4评论公告454.7工作邮件464.7.1发送邮件464.7.2邮件
10、即时提醒484.8本章小结48第五章 总结与展望495.1全文总结495.2展望49结束语51致谢52参考文献53附录54第一章 绪论3第一章 绪论1.1 课题背景和意义近年来,随着Internet的飞速发展,计算机网络得到了越来越广泛的应用,并且已经逐步进入了各行各业。自迈入信息时代以来,人们对沟通交流的需求和依赖也越来越强烈,各行各业对信息交流的要求也越来越高。如今,通过各种即时通信软件,人们已经可以随时的与远距离甚至世界各地的人进行实时的聊天交流,这样的交流给人们带来了极大的便捷和大量的经济节省。因此,即时通信(Instant Messaging)在人们的生活工作和学习中得到了更广泛的应
11、用。目前,网络上已经有不少即时通信软件在社会公众中流行,像MSN,腾讯QQ,新浪UC等,都是国内人们所熟知的知名流行即时通信软件,其技术方面也都处于国际领先水平。同时,企业内部即时通信领域,也涌现出了一大批的产品,如腾讯的RTX、汇讯的WiseUC、北京世纪奥通科技有限公司的TATA、上海艾睦网城科技有限公司的imo云办公,移动公司的移动企业飞信。本论文将通过开发一个具体的企业即时通信工具,以现有的各种技术,结合实际的开发过程讲解一些开发所需的基本知识,并讨论系统中关键环节的设计策略和最终的解决方案。 1.2 企业即时通信系统1.2.1 概念EIM,全称为 Enterprise Instant
12、 Messaging,中文翻译为企业即时通讯。企业即时通讯是一个企业级终端服务,一般其帐号为企业拥有,由企业注册完成后统一分配给员工。产品功能上以即时通讯为基础,贯穿搭载多种办公应用,企业成员以及企业间使用网络即时传递文字信息、档案、语音与视频交流,同时企业可通过企业即时通讯产品完成通知的下达与分发,目前,企业即时通讯已呈现出向集成通讯、办公管理等综合平台化产品服务方向转变的趋势。企业即时通讯产品以是否连接互联网作为划分依据,主要分为局域网型企业即时通讯产品和互联网型企业即时通讯产品。企业即时通讯主要特征为:1. 实现企业内部员工之间的的即时沟通,这是企业即时通信系统的最主要功能。2. 可以对
13、企业组织配置进行管理,这是企业对企业即时通信系统的额外的功能诉求。3. 满足企业的办公需求,例如企业公告功能以及员工之间文档资料的交互等。1.2.2 主要功能企业即时通信系统以即时通信为核心,集组织管理、即时聊天、数据交换、群组会议等功能为一体,为企业内部员工提供即时、快捷的交流方式。企业即时通信系统的主要功能介绍如下: 登陆:公司统一为每个员工注册账号,员工根据公司提供的账号和密码可以登录系统。 即时聊天:公司员工可以实时的与公司其他任一员工进行交流,员工可以设置交流时文字的大小、字体、颜色等。 文件传输:公司员工可以把本机上的文件(如文档、图片以及其它应用程序等)发送给其他公司员工。 群组
14、会议:员工可以创建群组并邀请其他员工加入群组,群组成员可以在群组中展开各种会议讨论,每个群组成员可以设置自己交流所用的文字的大小、字体、颜色等。 共享文件:群组成员可以将本机上的文件(如文档、图片以及其它应用程序等)共享给其它群组成员,其他群组成员在需要该文件时可直接在群组中下载,无需再找文件持有这拷贝。 浏览组织信息结构:公司员工可以查看公司的部门组成以及每个部门的人员配置。 日常公告管理:公司有重要通知时,可以在公告发布页面发布公司公告,公司员工会及时收到公司公告。员工可以对公司公告自由的进行评论并可以查看其它公司员工对此公告的评论。1.2.3 主要应用领域随着市场的变化,对企业即时通信系
15、统的要求也在变化。一个具有企业自己特色的集信息管理和即时通信为一体的内部应用软件,能够使一个企业或者团队更像一个整体,同时也能够给企业的管理和信息交流带来极大的便利,在一定程度上提高工作效率。1.2.4 企业即时通信系统现状EIM全称是Enterprise Instant Messaging,意为企业即时通讯。企业即时通讯是自2003年国内RTX的诞生进入了起步阶段,在经历了十年的发展时期后,目前的市场上已经是群雄割据,目前市场上已经有一些比较流行的企业即时通信系统,如腾讯的RTX、汇讯的WiseUC、北京世纪奥通科技有限公司的TATA、上海艾睦网城科技有限公司的imo云办公,移动公司的移动企
16、业飞信。企业即时通信系统从形式上主要分为两类,一类是需要在企业内部部署服务器的,如腾讯公司的RTX、汇讯公司的WiseUC,其中文档归类、整理等功能都需要用到企业提供的服务器来进行存储。另一类是不需要部署而是基于互联网的,如中国移动的企业飞信、互联网办公室的imo,通过组建出一个互联互通的办公环境来实现企业即时通讯的功能,同时对用户提供各类办公应用,如聊天功能、企业邮箱、群组会议等。根据权威调研机构的结果反应国内至少30%的企业监控甚至禁止员工使用QQ/MSN,而在国外这种情况也不乐观,72%英国企业禁止员工使用MSN、AIM、雅虎通在内的公众即时通信软件。1.3 论文的主要工作和章节安排本论
17、文旨在设计一个面向企业内部的功能实用、性能良好的即时通信系统,并对其中关键模块做详细的分析和实现的说明。在系统的设计和实现中,要突出系统的模块化,各模块间相对独立,通过模块间的接口交互工作,使整个系统层次、模块清晰。在数据传输方面,要注意数据的封装,使数据尽可能结构化,保持良好的一致性。根据上述要求,论文中详细阐述了系统的各个关键模块的设计方案和实现方法,主要工作如下:1) 对系统的需求说明做出详细描述以指导后续的开发。2) 对系统所需要的通信协议作出详细的设计,并给出实现方案。3) 对系统中数据包传输模块的设计做详细的说明,阐述数据包传输模块在系统中的工作流程以及该模块的实现方案。4) 结合
18、系统整体结构,详细给出系统各个功能的实现,并展示系统功能实现后的运行结果。第二章 企业即时通信系统需求分析7第2章 第二章 企业即时通信系统需求分析2.1 企业即时通信系统的需求分析员工考勤管理系统是根据日常工需要设立登陆、即时聊天、文件传输、群组会议、文件共享、公告管理、评论公告等功能模块。本系统的主要目的就是通过相关技术,以即时通信为核心,集组织管理、即时聊天、数据交换、群组会议等功能为一体,为企业内部员工提供即时、快捷的交流方式,提高公司正常的工作效率。本系统主要由五大功能,仅从业务层面陈述本软件产品所应具有的主要功能,在描述功能时应该针对每一项需求准确地描述其各项规格说明。本产品拟适用
19、于中小型公司和企业内部办公使用,对于系统维护人员,要求熟悉计算机并且有一定的编程基础。本系统可运行于windows 2000及以上版本的操作系统上,使用Microsoft Visual Studio2008平台,数据库采用SQL server2005,服务器需要安装IIS及.Net framework 2.0。2.2 企业即时通信系统的用例说明本系统的用例图如图2.1用例图所示。用户在登陆系统后可以进行其它操作。主要是对系统的功能模块在不同的需求下进行使用。主要有7个功能模块,登陆、点对点通信、群组会议、组织结构、日常公告管理、内部邮件。而每个功能模块又分为若干子模块。2.3 企业即时通信系统
20、的功能描述接下来先对每个系统功能进行简单的描述,通过这个步骤先确定到底要实现什么功能,每个功能点要完成什么任务,这可以为后续的编码实现提供一个指导。各系统功能的详细描述如下所示。1) 登陆u 登陆设置设置连接服务器所需的参数。参数有服务器IP地址、服务器监听的端口号。u 登陆图2.1用例图将用户名和密码发送至服务器进行验证,根据服务器发回的验证结果作出不同反应。如果验证成功则显示主界面,如果验证失败则提示用户验证失败。2) 主界面u 组织结构将服务器返回的组织结构信息只是给用户,用户可以双击打开与公司员工呃聊天窗口。u 群组列表将服务器返回的群组列表展示给用户,用户双击任一群组节点可以打开群组
21、回话框,此处还提供其它群组操作,包括创建群组、查看群组信息、解散群组、退出群组、刷新群组列表。u 公告列表将服务器返回的公司公告展示给用户,用户双击任一公告可以打开对于公告的评论页面,此处还提供公告的其它操作,如发布公告、删除公告。3) 点对点聊天u 发送信息将消息发送给对方,用户可以设置消息的字体、大小、颜色。u 传输文件客户端之间可以相互传输文件。一个客户端点击发送文件按钮选择要发送的文件,对方同意接收后开始传输文件。4) 群组会议u 创建群组员工可以根据需要创建群组,并同时邀请其他员工加入群组。u 邀请员工加入群组群组内成员可以邀请其他员工加入已有群组。u 将员工移除群组群组创建者即群主
22、可以将任一群组成员移除群组。u 群组聊天群组成员可以发送群组消息,群组内每一个成员都会收到消息,用户可以设置消息的字体、大小、颜色。u 上传共享文件群组成员可以将一些重要文件发布在群共享里面供其他群组成员下载。u 下载共享文件群组成员可以讲群组内的共享文件下载到本地。5) 邮件功能u 发送邮件员工可以使用公司内部邮箱向其它员工发送邮件。u 邮件即时提醒但有新邮件到达时系统会即时提示用户进行阅读。6) 组织结构查看员工可以查看公司的部门组成以及每个部门的人员配置。7) 日常公告管理u 发布公告公司有重要通知时,可以在公告发布页面发布公司公告,公司员工会及时收到公司公告。u 删除公告公司用户可以将
23、过期的、不需要的公告删除。u 查看公告评论员工双击任一公司公告,可以打开相关公告的评论页面,可以查看其它员工对次公告发表的评论。u 评论公告员工可以对公司发布的公告自由的进行评论,员工的评论可以实时的被其它员工获取。第三章 通信模块21第3章 第三章 通信模块3.1 企业即时通信系统的通信协议本模块在整个系统设计中是非常关键的一个模块,它处于最底层,不涉及任何数据包传输,也不涉及任何业务逻辑处理,但它的实现的好坏直接决定了上层的数据包传输模块以及业务处理模块的成功与否。3.1.1 数据收发方式的设计和数据包结构的定义3.1.1.1 数据收发方式的设计在企业及时通信系统中,所有功能的实现都必须依
24、赖客户端与服务端以及客户端与客户端的数据交换。由于客户端和服务端传输的数据格式各种各样,为了在收到数据后能够辨别对方要干什么,就需要规定一个客户端和服务端同时遵守的数据传输格式,即协议,客户端和服务端传输数据必须按照既定的协议传输,否则视为数据错误。 按照一般的惯例,要将交换的数据封装成数据包的形式进行传输。客户端可以向服务器以及在线客户端发送数据包,而服务端则可以向所有在线客户端发送数据包。所有操作都以“请求应答”的模式来进行。客户端与服务端的数据收发方式为客户端向服务端发送请求包,服务端对请求进行处理(比如查询数据库获取信息等),然后将处理结果作为应答包返回给客户端。过程如图3.1所示。客
25、户端与客户端的的数据收发方式为客户端向其它客户端发送请求包,其它客户端收到请求包后获取用户的响应,然后将用户的响应作为应答包返回给请求包发送方。过程如图3.2所示。3.1.1.2 通信协议中数据包结构的定义由于客户端之间、客户端与服务端之间传输的数据是各种各样的,所以必须将种类繁多的数据尽可能的封装到相同或者相似的结构中,否则在编码实现时将会带来极大的麻烦和极繁琐的工作。同时由于每次数据传输的数据长度不同,所以又要求定义的协议有很强的扩展型,能够满足各种类型的数据传输。图3.1客户端与服务端请求应答顺序图图3.2客户端与客户端请求应答顺序图综上所述,设计出了这样的协议格式,将数据包分为包头和包
26、体两个部分,包头中包含了操作标示以及跟随的参数个数,包体中包含了所有所需的参数,包体中的参数个数与包头中指明的参数个数相同。数据包结构如图3.3所示。这样的设计有以下两点好处:1) 在收到数据包后,首先可以根据包头中的操作标示识别到底要进行何种数据交换,然后可以根据包头中指明的参数个数从包体中取出操作所附带的参数。这样就将种类繁多的操作以及数据封装到了一个相同的结构中。2) 对于不同的操作,传输的参数个数不同,这时只需设置包头中的操作标示以及参数个数,然后将所有传输填装到包体中。这样就很好的支持了不同操作对数据长度以及参数个数的要求,体现了很好的扩展性。图3.3 通信协议数据包结构示意图3.1
27、.2 通讯协议数据包在实现过程中的定义3.1.2.1 相关技术讲解可扩展标记语言 (Extensible Markup Language, XML) 【1】 美亨特 、美 拉夫特,C#XML入门经典,清华大学出版社,2009;,用来标记文件以使文件能够具有结构性的一种标记语言,可以用来定义数据类型、标记数据等,它是允许用户定义自己的标记语言的一种源语言。由于XML的各种优点,他在各种应用程序中读写数据都非常,使XML很快成为唯一的用来数据交换的公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows,Mac OS,Linux
28、以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。正是由于XML的这些优点以及考虑到协议的格式,所以选择了以下方式来在编码中实现协议。数据包在网络上以符合协议格式的XML串来传输。3.1.2.2 数据包结构的定义如图3.所示,数据包的包头非常重要,其中它的操作标示标示了此数据包是做什么用的,而包头中的参数个数直接影响对包体的解析。能否正确解析数据包,将数据包转化为有用的信息首先就取决于对包头的正确解析。如图3.所示,数据包的包体也是非常重要的一部分,它包含了操作所需的所有参数,在解析包头得到操作标识后,对包体的解析直接决定了后续操作是否能够正常
29、进行。由上所述对数据包的正确解析是客户端与客户端、客户端与服务端之间正确交流的前提。结合定好的协议在代码中如下实现传输协议。一个完整的、正确的、可被客户端和服务端识别的数据包应该是符合以下格式的XML串:其中Name属性对应于数据包包头中的操作标识,各操作标识以及对应的操作描述如表3.1所示。ParamCount属性对应于数据包包头中的参数个数,用于解析后续包体中的各个参数,值可以为0-n。Param0至Param(n-1)对应于数据包的包体,里面依次为操作所需的n个参数。由于数据交换中数据种类繁多,在本论文无法将全部定义一一列出,这里仅通过登陆验证的协议数据包定义来阐释数据包具体的定义方式,
30、其他操作相关的数据包包体定义与之类似。客户端连接到服务端后将用户名密码发送至服务端进行验证,而服务端则将验证结果返回给客户端。下面介绍在代码中如何实现定义请求包和应答包。u 登录验证请求包的定义: /参数二其中Name=Verify ParamCount=2对应于与包头,Name的属性为Verify标识要进行的操作为验证密码,而ParamCount 的属性为2则标识后面跟有两个参数。Param0=账号 Param1=密码对应于包体,分别为第一个参数和第二个参数u 登录验证应答包的定义: /参数一其中Name=VerifyResult ParamCount=1对应于包头,Name的属性为Veri
31、fyResult标识返回的是验证结果,而ParamCount 的属性为1则标识后面跟有一个参数。Param0=结果对应于包体,标识验证结果,如果是1标识验证成功,如果是0则标识验证失败。表3.1 操作标识以及对应的描述标识名传输方向描述Verify客服端到服务端客户端向服务端发起认证,参数包括账号、密码VerifyResult服务端到客户端服务端向客户端返回认证结果,参数包括认证结果,0代表失败,1代表成功ClientInfo客服端到客户端客户端向服务端发送本机信息,参数包括监听的端口号Department服务端到客户端服务端向客户端传输部门信息,参数包括部门编号以及部门名称标识名传输方向描述
32、Msg客服端到客户端客户端向其它客户端发送聊天消息,参数包括用户ID以及消息内容TextForm客服端到客户端客户端向其它客户端发送聊天所用的字体信息,参数包括字体、字号、颜色SendFile客服端到客户端客户端向其它客户端发起文件传输请求,参数包括文件名、文件大小、传输文件所用的端口号GetGroupList客服端到服务端客户端向服务端发起请求,获取自己的群组列表GetGroupMember客服端到服务端客户端向服务端发起请求,获取群组成员,参数包括群组IDCreateGroup客服端到服务端客户端向服务器发起创建群组请求,参数包括群组名称、群组描述、所邀请的群组成员等GroupMsg客服端
33、到服务端客户端发送的群组消息,有服务端进行转发,参数包括发送者ID、字体、字号、字体大小、消息内容InviteGroupMember客服端到服务端客户端向服务器发送邀请其他员工加入群组请求,参数包括群组ID、以及邀请的人员列表RemoveGroupMember客服端到服务端群组创建者向服务端发送移除群组成员请求,参数包括群组ID、要移除的群组成员IDQuitGroup客服端到服务端群组成员向服务端发送退出群组请求,参数包括要退出的群组IDDestoryGroup客服端到服务端服务端到客户端群组创建者向服务端发送解散群组请求,服务端向群组成员发送群组解散通知,参数包括群组ID标识名传输方向描述U
34、pdateGroupStatus客服端到服务端服务端到客户端群组创建者向服务端发送群组说明更新通知,服务端向群组成员发送群组说明更新通知,参数包括群组ID、群组说明UpLoadFile客服端到服务端群组成员向服务端发送上传共享文件请求,参数包括群组ID、文件名、文件大小、传输文件所用的端口号DownLoadFile客服端到服务端群组成员向服务端发送下载共享文件请求,参数包括群组ID、文件名、传输文件所用的端口号GetGroupFile客服端到服务端群组成员向服务端发送获取群共享文件列表请求,参数包括群组IDDeleteGroupFile客服端到服务端创建者通知服务端删除群共享文件,参数包括群I
35、D、要删除的文件名Comment客服端到服务端服务端到客户端客户端向服务端传输发布的评论,服务端向客户端发送员工对某一公告的评论。参数包括公告ID、发布者ID、评论内容IssueAnnounce客服端到服务端客户端向服务端发送发布公告请求,参数包括公告内容GetAnnounce客服端到服务端客户端向服务端发送获取公告请求DeleteAnnounce客服端到服务端客户端向服务端发送删除公告请求,参数包括要删除的公告IDGetComment客服端到服务端客户端向服务端发送获取公告评论请求,参数包括要获取评论的公告IDStaff服务端到客户端服务端向客户端发送员工基本信息,参数包括员工ID、昵称、性
36、别、在线状态等StaffEndpoint服务端到客户端服务端通知在线用户员工上线信息,包括上线员工的ID、IP、通信所需的端口号DropLine服务端到客户端服务端通知在线用户员工下线信息标识名传输方向描述BeKickedOut服务端到客户端服务端通知用户被移出群组信息,包括群组IDAnnounceMent服务端到客户端服务端向客户端发送公司公告,参数包括发布者ID、时间、公告内容GroupFile服务端到客户端服务端向群组成员发送群共享文件列表,参数包括群组ID、文件名、文件大小3.1.3 本节小结本节主要介绍了本系统客户端与客户端之间、客户端与服务端之间的数据传输办法,详细设计出了数据在网
37、络上传输的通信协议。并详细讲解的通信协议数据包结构在实现中的定义。3.2 数据包传输模块的设计与实现本模块在整个系统设计中是非常重要的一个模块,在企业即时通信系统中,所有功能的实现都必须依赖客户端与服务端以及客户端与客户端的数据交换。而能否可靠、快速的进行数据交换直接决定了其它后续业务处理模块的正常运行,而本模块就承担了数据包交换这个关键任务,它确保其它模块要处理的数据是一个个完整的数据包,此模块成功实现后,其它模块将完全从繁琐的数据包交换中解放出来,将可以完全关注于与用户的交互以及其它业务的实现。3.2.1 套接字的模型选择和多线程的运用3.2.1.1 套接字I/O模型选择在利用SOCKET
38、进行编程时,有以下几个概念需要了解,同步、异步、阻塞、非阻塞【2】 方敏、张彤,网络应用程序设计,西安电子科技大学出版社,2005; 。同步、异步属于通信模式,而阻塞、非阻塞属于套接字模式。 同步方式通信的同步是指客户端在发送请求后,需要在得到服务端的回应后才可以发送下次请求。 异步方式与同步方式相反,在异步方式下,客户端再发送请求后,不必等待服务端做出回应即可以发送下次请求。 阻塞阻塞套接字是指在调用某一套接字的网络调用时,如读取数据、写入数据等,所调用的函数只有在得到结果后才会返回,在得到调用结果前,该调用所在的线程会挂起,该套接字会阻塞在该网络调用上,直到有数据到来或操作完成。 非阻塞同
39、样,与阻塞套接字不同的是,非阻塞套接字在进行某一网络调用时,不论调用能否立刻完成,它都会直接返回,因此对非阻塞套接字的网络调用不会将线程挂起。在本系统开发中,如果采用一般的同步阻塞套接字,当在发起一个不能立刻完成的网络调用时,由于阻塞套接字的特性,会将发起套接字网络调用的线程挂起,直接的结果就是导致UI主线程挂起,最后导致这个应用程序阻塞,界面无响应。所以本系统开发中采用了异步非阻塞套接字。而在用C#进行网络编程【3】 张立,C#2.0完全自学手册,机械工业出版社,2007;时,由于.Net Framework SDK对阻塞和非阻塞套接字机制的封装,其中TcpClient、UdpClien中的
40、BeginRead、BeginWrite等方法对套接字的非阻塞操作提供了很好地支持,因此我们直接采用System.Net命名空间System.Net.Sockets命名空间下的TcpListener、TcpClient、UdpClient等进行代码编写。3.2.1.2 多线程技术的运用正如人可以同时思考、听歌、走路,汽车可以同时转弯、播放音乐、加速一样,计算机也可以同时进行许多工作,这就是多线程的思想。多线程的好处是能使多个线程在应用程序中同时运行,这样就可以使多个工作并发的进行,大大的提高了程序处理数据的速度。例如在进行数据交换时,如果数据交换比较耗时,那就可以开启一个线程在后台专门负责数据
41、交换,而这时候主线程还可以同时响应用户的其它操作,这样也大大的提高了响应速度。综上所述,本系统在开发时充分的利用了多线程的诸多优点,对各种耗时操作都放在了单独的线程中进行处理。例如在进行文件传输时,由于文件传输是个非常耗时的工作,于是专门开启一个线程进行文件传输。这样即可以使用户在文件传输时进行其它操作,例如聊天、发布公告、评论公告等,又可以避免在文件传输时将主线程阻塞导致界面无响应,程序崩溃。在C#下进行多线程开发【4】 美Wrox Press Inc ,C#高级编程(第三版),清华大学出版社;时,在.Net的基础类库的System.Threading命名空间中,提供了大量的类和接口支持多线
42、程程序设计所需要实现的功能,包括线程的创建、停止、同步等。在本系统开发中就用System.Threading命名空间中的类进行多线程程序开发。3.2.2 数据包传输模块的设计3.2.2.1 数据包传输面临的一些问题在使用TCP/IP协议【5】 罗军舟,TCP/IP协议及网络编程技术,清华大学出版社,2004;的套接字编程的非阻塞操作中,当你发起一个BeginRead调用时,调用函数会直接返回,当异步调用完成时,会通知你设好的回调函数进行处理。当你的回调函数从缓冲区读取数据进行处理时就会遇到一个问题,如果对方多次数据包发送时间非常接近,在你读取数据包时数据缓冲区中就会存在多个数据包,而由于不同的
43、数据包长度不一样,当你读取时你就无法准确的读取一个数据包,你有可能读取多个数据包或者读取到不完整的数据包,这时候就需要某种机制来确保能够将缓冲区中的数据解析成一条条完整的协议。3.2.2.2 数据包缓冲区的设计与实现为了能够正确的进行通信,并且解决上一节提到的问题,将数据包缓冲区设计如下,在系统中创建一个数据缓冲区存储将要发送的数据或者接收到的数据,在缓冲区中所以数据以字节流的形式存储。数据缓冲区的大小为1025,其中前1024字节存储数据,第1025字节存储缓冲区中原有数据长度。每次收到数据后调用ProtocolHelper的GetActualString方法从数据包缓冲区中解析得到协议数组
44、,并将剩余的数据保存在数据包缓冲区中。在ProtocolHelper的GetActualString中用到了一些C#对于正则表达式【6】 30分钟学习正则表达式,的支持,其中首先定义了一个符合通信协议格式的匹配规则,用来对输入的字符串input进行匹配,proList存储匹配得到的协议列表,由于可能读取到多个数据包,所以也可能匹配得到多条协议。匹配结束后将input中的剩余部分移到input最前部,并将匹配得到的协议列表proList返回。3.2.3 数据包传输模块的实现3.2.3.1 客户端与服务端的数据包传输对于客户端与服务端的通信,客户端启动后先调用StartClient方法做一些初始化
45、,然后在StartClient方法中投送一个异步接受操作(BeginRead),异步操作直接返回,在异步接受操作完成后,会调用OnStreamToServerReadComplete方法,在OnStreamToServerReadComplete中,先调用ProtocolHelper的GetActualString方法对数据包缓冲区中的数据进行解析。解析完毕后继续投送下一次异步接受操作(BeginRead),然后再将解析得到的每个数据包委托给主线程进行处理,处理过程在主线程的HandleServerProtocol方法中。图3.2描述了客户端与服务端通信模块的工作流程。初始化尝试连接服务器获取错误信息,向业务逻辑层反馈开始监听网络事件(BeginRead)调用读响应事件(OnStreamToServerReadComplete)将消息重新封装,交给业务逻辑层进行处理。(HandleServe