

已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要即时通信在广域网上飞速发展,由于越来越多的企业对于电子化办公的深入,即时通信系统对于局域网中的需求增多。本文首先介绍了即时通信的历史和研究现状等,然后对网络协议、序列化、多线程处理等即时通信的关键技术进行了分析和研究。在此基础上实现了一个基于.net 2.0的局域网即时通信系统。此系统采用.net 2.0作为运行平台,选用了更适宜局域网环境的udp协议作为其网络协议,并使用了多线程处理来改进系统。通过实验,在局域网环境下此系统运行良好,能实现即时通信的基本功能。关键词:即时通信,局域网,多线程,网络协议abstractinstant messaging online is developing rapidly in the internet and lan. this paper introduces the real-time communications, such as history and research, and then on the network protocol, serialization, multi-threaded processing of critical real-time communications technology for the analysis and research. on this basis achieve a lan instant messaging system based on the.net 2.0 platform. this system use .net 2.0 as a platform, choose a more suitable environment for the udp network protocol as its network protocol, and used to improve multi-threaded processing system. through experiments, in lan environment this system is running well, to achieve the basic functions of instant messaging.keywords:instant messaging(im), local area network(lan), multi-threaded, network protocol目录1 课题研究背景11.1 即时通讯的发展11.2 即时通讯系统21.3 局域网即时通讯41.4 论文内容安排52 局域网即时通信的关键技术62.1 网络协议62.2 c/s模型82.3 序列化102.4 多线程113 系统设计133.1 系统结构和功能设计133.2 类库的设计143.3 客户端设计163.4 服务器端控制台模块设计203.5 附加功能模块的设计204 系统实现与测试234.1 系统开发平台和实现环境234.2 类库的实现244.3 客户端实现284.4 服务器端实现294.5 附加功能模块实现324.6 系统测试及结果分析345 总结与展望385.1 总结385.2 展望38参考文献40致谢41 iii40基于.net 2.0的局域网即时通信1 课题研究背景1.1 即时通讯的发展1.1.1 即时通讯概要即时通讯(instant messaging,简称im)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息、档案、语音与视频交流。能让你迅速地在网上找到你的朋友或工作伙伴,可以实时交谈和互传信息。而且,现在不少im软件还集成了数据交换、语音聊天、网络会议、电子邮件的功能。在早期的即时通讯程序中,使用者输入的每一个字符都会即时显示在双方的萤幕,且每一个字符的删除与修改都会即时的反应在萤幕上。这种模式比起使用e-mail更像是电话交谈。在现在的即时通讯程序中,交谈中的另一方通常只会在本地端按下送出键(enter或是ctrl+enter)后才会看到讯息。1.1.2即时通讯的历史im软件的历史并不久远,但是它一诞生,就立即受到网民的喜爱,并风靡全球。在它的发展史上,以色列人是功不可没的。正是四位以色列籍的年轻人,在1996年7月成立的mirabilis公司,并于同年11月推出了全世界第一个即时通讯软件icq,取意为“我在找你”“i seek you”,简称icq了。直到现在,icq已经推出了它的2002a版本,在全球即时通讯市场上占有非常重要的地位。早期的icq很不稳定,尽管如此,还是受到大众的欢迎,雅虎也推出yahoo! pager,美国在线也将具有即时通讯功能的aol包装在netscape communicator,而后微软更将windows messenger内建于microsoft windows xp作业系统中。目前,国内最为流行的即时通讯软件是oicq(简称qq)。它以良好的中文界面和不断增强的功能形成了一定的qq网络文化。messenger虽出道较晚,但依托微软的强大背景,实力也不可小视。作为windows xp的一部分,messenger 整合了操作系统的许多功能,如多种形式的聊天选择、多人的单窗口讨论式交流以及充分的文件与桌面共享功能等。它的令人耳目一新的中文界面和注册方式,连同它强大的功能,着实吸引了众多的眼球的注视,此外还有许多有特点的im软件。1.1.3即时通讯的现状目前,中国市场上的企业级即时通信工具主要包括:腾讯公司的rtx、ibm公司的lotus sametime、微软公司的uc、点击科技的gke、中国互联网办公室的imo、红杉树公司的easy touch、亿企通的jingoal等。相对于个人即时通信工具而言,企业级即时通信工具更加强调安全性、实用性、稳定性和扩展性。企业级的即时通信实际上也可以说是个人即时通信的应用延伸。据统计,90%以上的企业网内的终端机上都在运行qq/msn等个人即时通信软件,人们已经习惯于使用即时通信工具进行日常的工作联络。可是,大多数员工都是在没有获得企业许可的情况下使用个人即时通信工具,这给企业网络带来了比较大的安全和效率问题。加上个人即时通信工具经常让员工陷入非工作状态的聊天中,因此很多企业也通过各种手段禁止员工进行qq/msn等操作。在这种现状下,采用企业级的即时通信软件自然就成为了企业客户最好的解决方案,既满足了内部员工的沟通习惯,又解决了公司制度和网络安全等问题,一举两得。可以说,目前在中国相对于erp、oa、crm这些管理软件领域的红海竞争环境而言,企业级即时通信领域仍还处于各厂商跑马圈地的时代。尽管中国本土提供企业级即使通信软件服务的厂商面向的竞争对手是微软、ibm这些国际软件巨头,但是,值得我们国人欣慰的是,目前在中国企业级即时通信市场中,占据了70%的市场份额的腾讯公司就是我们的本土民族企业,可谓是一支独秀。1.2 即时通讯系统1.2.1 典型的即时通讯系统简介腾讯qq是由深圳市腾讯计算机系统有限公司开发的一款基于internet的即时通信(im)软件,我们可以使用qq和好友进行交流,信息和自定义图片或相片即时发送和接收,语音视频面对面聊天,功能非常全面。此外qq还具有与手机聊天、bp机网上寻呼、聊天室、点对点断点续传传输文件、共享文件、qq邮箱、楚游、网络收藏夹、发送贺卡等功能。qq不仅仅是简单的即时通信软件,它与全国多家寻呼台、移动通信公司合作,实现传统的无线寻呼网、gsm移动电话的短消息互联,是国内最为流行功能最强的即时通信(im)软件。腾讯qq支持在线聊天、即时传送视频、语音和文件等多种多样的功能。同时,qq还可以与移动通讯终端、ip电话网、无线寻呼等多种通讯方式相连,使qq不仅仅是单纯意义的网络虚拟呼机,而是一种方便、实用、高效的即时通信工具。qq可能是现在在中国被使用次数最多的通讯工具。随着时间的推移,根据qq所开发的附加产品越来越多,如:楚游、qq宠物、qq音乐、qq空间等,受到qq用户的青睐。为使qq更加深入生活,腾讯公司开发了移动qq和qq等级制度。只要申请移动qq,用户即可在自己的手机上享受qq聊天,一个月收取10元。移动qq2007实现了手机的单项视频聊天。不过对手机的要求很高。1.2.2 即时通讯的9大应用即时通讯软件除了可以实时交谈和互传信息,不少还集成了数据交换、语音聊天、网络会议、电子邮件的功能。下面就来介绍一下即时通讯软件的主要的应用功能。(1)文字聊天聊天功能是im软件最基本、也是最重要的功能,基本上每一种im软件在这个功能上的操作都差不多:如果用户想与联系人进行聊天,可以双击im中联系人的头像,在弹出的对话框中敲入文字信息发送即可。qq的特点是可以给不在线的朋友发送信息,对方下次上线的时候可以收到,msn虽然不具备这样的功能,但是它在聊天过程中可以使用各种漂亮的表情图标为聊天添加了不少情趣。(2)语音聊天如果打字聊天的方式已不能满足,qq还提供了“二人世界”里的实时语音聊天,首先您得有音箱或者耳机、麦克风,然后就可以向您的网友发送连接到“二人世界”的请求,通过后双方不仅可以用文字聊天,还可以直接讲话。此外qq还有传送语音功能利用此功能可以传送语音信息。首先用鼠标左键单击在线好友的头像,选择“传递语音”命令,然后就会弹出一个对话框,录音以后就可以发送了。(3)传送文件im软件能点对点的传输文件,有时候利用此功能要比使用e-mail还方便许多,当然此项功能必须在对方在线时才能使用。在qq的好友头像上点击右键,选择“传送文件”,选定要传送的文件,点击发送,等待对方接受请求。此外,icq的文件传送功能还支持类似断点续传的功能,不必担心文件传送过程中发生突然中断的情况。(4)拨打电话在msn messenger中提供了pc-phone的拨打电话功能,你可以在msn messenger软件主窗口中,单击操作窗口“我想”下面的“拨打电话”或者用鼠标右键单击要呼叫的人的名字,单击“拨打电话”,就可以开启拨叫电话功能。但在进行电话呼叫之前必须注册语音服务提供商。由于msn messenger在国内暂时还没有开通这项业务,所以我们还无法使用。(5)远程协助远程协助是在windows xp中引进的新概念,是windows messenger独有的功能,远程协助可以将电脑的控制权分享给对方以便于对寻求协助者提供帮助,通过它,对方可以很容易地控制寻求协助者的桌面。它的功能主要体现在应用程序共享、远程协助、白板共享、寻求远程协助等方面。由于这一功能非常强大,在寻求协助的过程中系统会多次提醒并给出选择,请用户在使用这一功能时多加小心,确认对方是否可靠。(6)视频聊天如果你的网速够快,又有摄像头的话,完全可以用im软件来代替掉netmeeting了,在聊天的同时,不仅可以通话,还可以看到对方的图像,表情,备感亲切,给您带来一份全新的感受。windows messenger对视频聊天功能支持的不错,设置和使用也非常简单,右击好友中“开始视频对话”就完成操作,非常方便。(7)邮件辅助im和e-mail是我们在网上最常用的两种工具,如今不少im软件将两者作了完美的结合。在qq中你可以直接给自己的好友发邮件,而无须再输入e-mail地址;此外对于自己的信箱qq还有检查新邮件功能,在“系统参数”中设置您自己的e-mail,填好pop3地址,您可以选择定时检查时间,qq就会自动检查有否新邮件到达。对于msn messenger来说它的邮件功能就更强大了,使用msn messenger你必须有一个邮件账号,每次当您的msn messenger登录成功时,在右下角自动弹出一个窗口,里面写有该e-mail账户内的信件状况,在使用过程中如果您的邮箱中有了新邮件,马上会冒出一个提示窗。(8)发送短信目前im与各种移动终端设备的结合也越来越多。使用qq向手机发送短信需要手机开通移动qq服务,单击对方头像图标,在打开的快捷菜单中选择“手机短讯”命令,在打开的对话框中输入信息,然后点击发送即可完成,这时对方的手机就可以收到一个消息。给bp机发短讯也是一样,不过对方的bp机服务台必须是qq所支持的情况下才行。当对方的手机收到你发来的短信后还可以回复,这时候您的qq会弹出“查看手机短讯”的窗口来,非常方便。(9)浏览咨询有的朋友上网只是使用qq聊天,其实用qq也可以很方便的看到每日最新的新闻。点击qq面板中的“资讯通”按钮,瞧,“资讯通”已经为您订制好新闻啦:“新闻”、“it科技”、“证券”、“体育”、“娱乐”共十二大类新闻信息。你愿意看哪方面的新闻,就点击相应的图标,则出现“资讯通”界面,自动提取出当日新闻标题。通过这些标题,你可以快速地选择出自己感兴趣的新闻,点击之就可以调用浏览器读取了。这样您就可以足不出户阅读有关内容,节省了您的查找时间、提高了浏览效率。1.3 局域网即时通讯1.3.1 局域网即时通讯简介局域网即时通信,不同于大家熟知的msn这样的基于互联网的即时通信,而是基于企业内部局域网使用的即时通信。即时通信在互联网领域的应用取得了巨大的成功,但是在企业内部的应用仍远未普及。鉴于即时通信作为一项有广泛应用价值的技术框架,在逐步适应企业网络的应用特点后,局域网即时通信必将取得和电子邮件一样的普及效果。1.3.2 为什么需要局域网即时通讯语言交流本身是方便快捷的,所以人们已经习惯于用电话进行沟通。但是电话在2个人之间还相对容易一点,遇到需要超出2人的交流时,就需要约时间来开会和讨论了。这个预约和集中都需要很多时间,遇到跨部门的协同时,连预约都很成问题。但是即时通信在这方面具有很大的便利:只要分个组,将需要开会的人归在组里。只要一输入文字,就可以在一秒左右通知完所有的人了,同时也可以立即看到其他人的回应。这就大大降低了协同造成的时间损耗。效率的提高是不言而喻的。即时通信还具有软件本身固有的强大的信息组合能力。即使可以方便的电话交流,但是,人们经常在讨论的过程中,需要交流很多资料或图纸。电话交流就不方便,就要放下电话,发email到对方,再重新进入讨论话题。如果有了即时通信,就可以将文件即时发送给对方,而不用过久的中断交流。成本和效率是一个硬币的2个面。当效率提高时,成本就自然的下降。有时,节约的成本甚至超过了想像。比如:有的单位很多分支机构,那么开会就不是简单的部门协同,而是需要车来车往。即时通信的使用可以让一些简单的会议不需要频繁的集中在一起讨论,也因此带来了可观的成本效益。即时通信让语音和视频会议技术逐步走向成熟应用。硬件终端式的视频会议很早就有了,但是因为不能细粒度的和办公桌面在一起,所以,主要用在不同的分公司之间的视频交流。对于日常性的视频交流,仍要靠即时通信来提供。目前在一人对一人的视频交流上,这样的应用已经很多了。但是,可以多人参与的视频会议仍然面临着性能和带宽的瓶颈。视频会议可以让把不同地方的人虚拟在一起,用直观和友好的交流方式,忽略地域的区别。这种模式犹如科幻般的虚拟社会,将克服由于距离和空间造成的管理、效率、乃至于人际交往方式等无数种缺陷。可以想像的是,视频会议技术将会进一步的发展,网络带宽也将逐渐解除瓶颈,这使视频技术将深入到方方面面,将使将来的企业工作模式有质的变化和提升。1.4 论文内容安排第一章介绍即时通讯的发展、即时通讯系统以及企业即时通讯的基本概念。第二章是局域网即时通信的关键技术,主要介绍了网络协议,c/s模型以及用于传输的序列化和反序列化等。第三章是系统设计,设计了一个基于.net2.0的即时通信系统的结构和功能,以及介绍了类库、服务端、客户端和附加功能的概要设计。第四章是系统实现和测试,介绍了系统实现的环境和平台,描述了类库中的各组件、服务端的数据处理、客户端的工作流程,并对系统测试的结果进行了分析。第五章是总结和展望,总结了论文的内容以及本人在毕业设计环节中的一些体会,对系统功能上的不足进行总结和展望。2 局域网即时通信的关键技术2.1 网络协议协议是用来描述进程之间信息交换数据时的规则术语。在计算机网络中,两个相互通信的实体处在不同的地理位置,其上的两个进程相互通信,需要通过交换信息来协调它们的动作和达到同步,而信息的交换必须按照预先共同约定好的过程进行。例如,网络中一个微机用户和一个大型主机的操作员进行通信,由于这两个数据终端所用字符集不同,因此操作员所输入的命令彼此不认识。为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。当然,对于不相容终端,除了需变换字符集字符外。其他特性,如显示格式、行长、行数、屏幕滚动方式等也需作相应的变换。这样的协议通常称为虚拟终端协议。又如,通信双方常常需要约定何时开始通信和如何通信,这也是一种协议。所以协议是通信双方为了实现通信所进行的约定或对话规则。2.1.1 udp协议udp(user datagram protocol) 用户数据报协议 用户数据报协议(udp)是 osi 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。是一个简单的面向数据报的传输层协议,ietf rfc 768是udp的正式规范。 udp 协议基本上是 ip 协议与上层协议的接口。 udp 协议适用端口分别运行在同一台设备上的多个应用程序。 由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 udp 的“端口号”完成的。例如,如果一个工作站希望在工作站 上使用域名服务系统,它就会给数据包一个目的地址 ,并在 udp 头插入目标端口号 53 。源端口号标识了请求域名服务的本地机的应用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这个端口上。 udp 端口的详细介绍可以参照相关文章。 与 tcp 不同, udp 并不提供对 ip 协议的可靠机制、流控制以及错误恢复功能等。由于 udp 比较简单, udp 头包含很少的字节,比 tcp 负载消耗少。 udp 适用于不需要 tcp 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。 udp 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(nfs)、简单网络管理协议(snmp)、域名系统(dns)以及简单文件传输系统(tftp)、动态主机配置协议(dhcp)、路由信息协议(rip)和某些影音串流服务等等。2.1.2 tcp/ip协议tcp/ip(transmission control protocol/internet protocol的简写,中文译名为传输控制协议/互联网络协议)协议是internet最基本的协议,简单地说,就是由网络层的ip协议和传输层的tcp协议组成的。作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开tcp/ip协议。不过tcp/ip协议也是这三大协议中配置起来最麻烦的一个,单机上网还好,而通过局域网访问互联网的话,就要详细设置ip地址,网关,子网掩码,dns服务器等参数。tcp/ip尽管是目前最流行的网络协议,但tcp/ip协议在局域网中的通信效率并不高。2.1.3 socket 协议socket的英文原义是“孔”或“插座”。在这里作为4bds unix的进程通信机制,取后一种意义。socket非常类似于电话插座。以一个国家级电话网为例。电话的通话双方相当于相互通信的2个进程,区号是它的网络地址;区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号码相当于socket号。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求(假如对方不在同一区内,还要拨对方区号,相当于给出网络地址)。对方假如在场并空闲(相当于通信的另一主机开机且可以接受连接请求),拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂起电话机相当于关闭socket,撤消连接。在电话系统中,一般用户只能感受到本地电话机和对方电话号码的存在,建立通话的过程,话音传输的过程以及整个电话系统的技术细节对他都是透明的,这也与socket机制非常相似。socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,它就满足了。至此,我们对socket进行了直观的描述。抽象出来,socket实质上提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则是没有办法建立联系并相互通信的。正如打电话之前,双方必须各自拥有一台电话机一样。在网间网内部,每一个socket用一个半相关描述:(协议,本地地址,本地端口)一个完整的socket有一个本地唯一的socket号,由操作系统分配。最重要的是,socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的socket 系统调用。客户随机申请一个socket (相当于一个想打电话的人可以在任何一台入网电话上拨号呼叫),系统为之分配一个socket号;服务器拥有全局公认的 socket ,任何客户都可以向它发出连接请求和信息请求(相当于一个被呼叫的电话拥有一个呼叫方知道的电话号码)。socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器socket 半相关为全局所公认非常重要。读者不妨考虑一下,两个完全随机的用户进程之间如何建立通信?假如通信双方没有任何一方的socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的。socket 接口是访问 internet 使用得最广泛的方法。 如果你有一台刚配好tcp/ip协议的主机,其ip地址是01, 此时在另一台主机或同一台主机上执行ftp 01,显然无法建立连接。因01 这台主机没有运行ftp服务软件。同样, 在另一台或同一台主机上运行浏览软件 如netscape,输入01,也无法建立连接。现在,如果在这台主机上运行一个ftp服务软件(该软件将打开一个socket, 并将其绑定到21端口),再在这台主机上运行一个web 服务软件(该软件将打开另一个socket,并将其绑定到80端口)。这样,在另一台主机或同一台主机上执行ftp 01,ftp客户软件将通过21端口来呼叫主机上由ftp 服务软件提供的socket,与其建立连接并对话。而在netscape中输入01时,将通过80端口来呼叫主机上由web服务软件提供的socket,与其建 立连接并对话。 在internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。2.2 c/s模型在网络连接模式中,除对等网外,还有另一种形式的网络,即客户机/服务器网,client/server。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。使用计算机的人是计算机的“用户”(user)而不是“客户”(client)。但在许多国外文献中,也经常把运行客户程序的机器称为client(这种情况下也可把client译为“客户机”),把运行服务器程序的机器称为server。所以有时要根据上下文判断client与server是指软件还是硬件。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到 client端和server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是client/server形式的两层结构,由于现在的软件应用系统正在向分布式的web应用发展,web和client/server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。2.2.1 c/s结构的优缺点c/s结构的优点是能充分发挥客户端pc的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。对客户端的操作系统一般也会有限制。可能适应于windows 98,但不能用于windows 2000或windows xp。或者不适用于微软新的操作系统等等,更不用说linux、unix等。2.2.2 c/s架构软件的优势与劣势 应用服务器运行数据负荷较轻。最简单的c/s体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序。二者可分别称为前台程序与后台程序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器程序被启动,就随时等待响应客户程序发来的请求;客户应用程序运行在用户自己的电脑上,对应于数据库服务器,可称为客户电脑,当需要对数据库中的数据进行任何操作时,客户程序就自动地寻找服务器程序,并向其发出请求,服务器程序根据预定的规则作出应答,送回结果,应用服务器运行数据负荷较轻。数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,是由服务器程序和客户应用程序分别独立进行的,前台应用可以违反的规则,并且通常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序中不集中实现,例如访问者的权限,编号可以重复、必须有客户才能建立定单这样的规则。所有这些,对于工作在前台程序上的最终用户,是“透明”的,他们无须过问(通常也无法干涉)背后的过程,就可以完成自己的一切工作。在客户服务器架构的应用中,前台程序不是非常“瘦小”,麻烦的事情都交给了服务器和网络。在c/s体系的下,数据库不能真正成为公共、专业化的仓库,它受到独立的专门管理。c/s架构的劣势是高昂的维护成本且投资大。首先,采用c/s架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理,但逻辑上两地的操作者要直接访问同一个数据库才能有效实现,有这样一些问题,如果需要建立“实时”的数据同步,就必须在两地间建立实时的通讯连接,保持两地的数据库服务器在线运行,网络管理工作人员既要对服务器维护管理,又要对客户端维护和管理,这需要高昂的投资和复杂的技术支持,维护成本很高,维护任务量大。其次,传统的c/s结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。在java这样的跨平台语言出现之后,b/s架构更是猛烈冲击c/s,并对其形成威胁和挑战。2.3 序列化序列化 (serialization)是将对象状态转换为可保持或传输的格式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据。确切地说,代码执行序列化需要特殊的权限:即指定了 serializationformatter 标志的 securitypermission。在默认策略下,通过 internet 下载的代码或 intranet 代码不会授予该权限;只有本地计算机上的代码才被授予该权限。通常,对象实例的所有字段都会被序列化,这意味着数据会被表示为实例的序列化数据。这样,能够解释该格式的代码有可能能够确定这些数据的值,而不依赖于该成员的可访问性。类似地,反序列化从序列化的表示形式中提取数据,并直接设置对象状态,这也与可访问性规则无关。对于任何可能包含重要的安全性数据的对象,如果可能,应该使该对象不可序列化。如果它必须为可序列化的,请尝试生成特定字段来保存不可序列化的重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。2.3.1 序列化的目的1、以某种存储形式使自定义对象持久化;2、将对象从一个地方传递到另一个地方。2.3.2 两种序列化技术 二进制序列化保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用。例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。xml 序列化仅序列化公共属性和字段,且不保持类型保真度。当您要提供或使用数据而不限制使用该数据的应用程序时,这一点是很有用的。由于 xml 是一个开放式标准,因此,对于通过 web 共享数据而言,这是一个很好的选择。soap 同样是一个开放式标准,这使它也成为一个颇具吸引力的选择。2.4 多线程2.4.1 线程每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。2.4.2 多线程多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。使用线程的好处有以下几点:(1)使用线程可以把占据长时间的程序中的任务放到后台去处理(2)用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度(3)程序的运行速度可能加快(4)在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。2.4.3 线程模型单线程模型在这种线程模型中,一个进程中只能有一个线程,剩下的进程必须等待当前的线程执行完。这种模型的缺点在于系统完成一个很小的任务都必须占用很长的时间。块线程模型这种模型里,一个程序里可能会包含多个执行的线程。在这里,每个线程被分为进程里一个单独的块。每个进程可以含有多个块,可以共享多个块中的数据。程序规定了每个块中线程的执行时间。所有的请求通过windows消息队列进行串行化,这样保证了每个时刻只能访问一个块,因而只有一个单独的进程可以在某一个时刻得到执行。这种模型比单线程模型的好处在于,可以响应同一时刻的多个用户请求的任务而不只是单个用户请求。但它的性能还不是很好,因为它使用了串行化的线程模型,任务是一个接一个得到执行的。多线程块模型多线程块模型(mta)在每个进程里只有一个块而不是多个块。这单个块控制着多个线程而不是单个线程。这里不需要消息队列,因为所有的线程都是相同的块的一个部分,并且可以共享。这样的程序比单线程模型和sta的执行速度都要块,因为降低了系统的负载,因而可以优化来减少系统idle的时间。这些应用程序一般比较复杂,因为程序员必须提供线程同步以保证线程不会并发的请求相同的资源,因而导致竞争情况的发生。这里有必要提供一个锁机制。但是这样也许会导致系统死锁的发生。2.4.2 多线程在.net中的工作方式在本质上和结构来说,.net是一个多线程的环境。有两种主要的多线程方法是.net所提倡的:使用threadstart来开始你自己的进程,直接的(使用threadpool.queueuserworkitem)或者间接的(比如stream.beginread,或者调用begininvoke)使用threadpool类。一般来说,你可以手动为长时间运行的任务创建一个新的线程,另外对于短时间运行的任务尤其是经常需要开始的那些,进程池是一个非常好的选择。进程池可以同时运行多个任务,还可以使用框架类。对于资源紧缺需要进行同步的情况来说,它可以限制某一时刻只允许一个线程访问资源。这种情况可以视为给线程实现了锁机制。线程的基类是system.threading。所有线程通过cli来进行管理。3 系统设计3.1 系统结构和功能设计3.1.1 系统结构设计基于以上的分析和研究,本文设计实现一个基于.net 2.0平台的局域网通信系统。该系统主要由客户端和服务器端两部分组成。系统结构如图3-1所示。图3-1 系统结构图3.1.2 数据库设计局域网即时聊天系统的服务端,主要记录注册人员的信息,同时也可以根据需求扩展功能,记录所有人员的聊天信息。本系统使用microsoft sql server 2000作为后台数据库。在局域网用户登录时,为了可以在服务器端返回所有注册用户的信息,可以在服务器端的数据库中创建一个用户注册表,用于记录注册用户的ip地址、在线状态、用户名和密码等。用户注册表的实体e-r图如图3-2所示。图3-2 用户注册表的实体e-r图3.1.3 系统功能设计系统主要功能如下:(1)用户注册:每个客户端支持一次注册,注册成功后在客户端记录下注册信息,下次打开客户端时直接进入登录界面。 如果注册信息文件损坏,可以重新进行注册。(2)用户登录:在检测到本地的注册信息文件之后,客户端根据注册信息文件,向相应的服务器端发送登陆请求,服务器返回确认后,进入客户端界面。(3)即时聊天:在客户端界面可以看到已经在服务器上注册的用户列表,以及当前各用户的在线状态。选择需要进行即时聊天的用户,双击打开信息窗口,在文本输入区输入即时聊天信息,点击发送按钮就可以发送到对方客户端并显示。对于接收方,在已登录的客户端上接受到一个由服务器转发的数据包,通过反序列化分析出内容,并且激活对应用户的聊天窗口,并显示接收到的即时信息。(4)文件发送:在打开的即时聊天窗口上,添加有文件发送的button,通过点击并选择了所要发送的文件后,即可向对方发送文件。接收到的文件被存放在指定的文件夹内,方便用户查看。3.2 类库的设计在开发局域网通信系统时,可以将udp协议封装成一个控件,或是将局域网中发送及接收信息的功能封装成类,同时也将需要通过网络发送的一些指令和消息封装进去,这样就可以统一客户端和服务器端所调用的自定义规则并且也统一了通过网络传输的一些类的实体,不会造成在序列化信息发送后,接收端反序列化失败。类库中所封装的类主要有以下几个方面。3.2.1 udp socket控件该控件讲udp协议中的ip地址和端口号以控件属性的形式进行设置,并自定义一个数据到达的事件,用于对主机的端口号进行监听,以获取远程计算机发送的消息。同时,因为客户端和服务器端都会使用到这个控件,考虑到服务器端的需求,可能有暂停服务的需求,在控件的公共属性上,封装了状态,可以方便的通过设置状态属性来开启或停止socket端口的监听。同时,由于对于端口的监听是实时的,因此,在此需要使用多线程处理,才能保证客户端和服务器端的其他操作能正常稳定的工作。如果不使用多线程,那么在打开端口监听后,整个程序就会进入一个假死的状态,直至关闭监听。3.2.1 baseinfo、userinfo及user类baseinfo类用于记录服务端和客户端的基本信息,并且通过方法来获取服务器端的所有ip地址。userinfo类用于记录当前客户端用户的编号、ip地址、端口号、用户名称以及用户状态,并且对该类进行序列化,以便于将其实例在局域网络中传输。user类主要是将服务器端所有注册用户信息存储到基类的innerlist列表中。这样当用户注册或者登录时,可以将该列表中的信息群发给当前在线的所有用户,以改变在各已登录的客户端中显示状态。这三个类的类视图如图3-3所示。图3-3 baseinfo、userinfo和users类视图3.2.1 message、filedeitals类message类主要是用枚举型的元素值指定消息发送的命令、消息类型、消息发送的状态等,并用serializable对类进行序列化,当序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保对象不被序列化多次。filedetails类包含有3个字段,用于在文件传输时,首先在发送端,将需要发送的文件的详细信息封装在该类的实例中,然后对其进行序列化,发送到指定端口,接收端打开监听,接收到数据后,反序列化从而得到即将接收文件的信息。3.2.1 optiondata类该类将服务器端对数据库的操作进行了封装,通过对该类中方法的调用,可以对数据表进行添加、修改以及读取的操作。主要有两个方法:1、通过sql语句,对指定数据表进行查询,并将记录个数进行返回。该方法用户用户登录时,对用户名和密码进行匹配查询。2、通过sql语句,对指定数据表进行查询,并将查找到的数据信息以sqldatareader对象进行返回。3.3 客户端设计客户端,作为本系统的主体部分,主要有以下几个基本的功能。用户注册、用户登录、即时聊天以及文件发送等。3.3.1 注册模块设计注册模块主要是在客户端用户第一次运行时或者是无法检测到正确的本地注册信息文件时所执行的,对当前用户进行注册,并将注册的信息发送给服务器端进行数据库写入。对于注册信息,服务器端使用的为userinfo类的实例,而在本地,则使用ini文件存储,ini文件的结构如下:mycommunicatorid=port=11100name=client参数说明:mycomminicator:小节名;id:关键字;。创建的ini文件存放在c:windows 路径下,文件名为server.ini。注册模块的主要工作流程如图3-4所示:图3-4 注册流程3.3.2 登录模块设计当运行客户端时,检测到本地的注册信息文件或已完成注册,则进入到客户端登录界面。该模块主要是将用户名和密码发送到服务器端,当服务器端有该用户时,将返回一个登陆成功的消息,通过该消息,将关闭登录窗口,进入客户端主窗体。登录模块的主要工作流程设计如图3-5所示:图3-5 登录流程3.3.3 主模块设计该模块,主要显示当前已注册的所有用户名称,并根据用户的在线情况,设置用户名称前的图表样式。在窗体中将使用innerlist列表记录当前已注册用户的信息,并将innerlist列表中的信息添加到treeview控件中。innerlist用于存储项目的arraylist对象,它是collectionbase对象中的一个属性,可以通过该属性的add()和remove()方法想列表中添加和移除元素。主模块在加载前首先要去加载登陆模块,如果登陆模块返回正确登陆的信息则再去加载主模块。而主模块在加载完后还负责打开注册时所用的端口号,并监听,这样就可以接受分析从局域网上获取的各类信息并对信息进行分类处理,具体流程如图3-6所示:图3-6 主模块工作流程3.3.4 消息发送模块设计消息发送模块主要用于实现客户端与远程客户端的消息通信,基本的功能时实现文字的实时发送。并通过调用文件发送模块进行点对点的文件发送。在使用socket发送消息时,只能以二进制流的形式进行发送,并且规定socket发送的内存流不能大于1024,当发送大容量的信息时,要对信息进行分流发送,可以使用memorystream对象的read()方法来读取指定块的信息。read()方法的语法格式如下:/将二进制流存储到内存流中memorystream stream = new memorystream(data);/在当前流中读取字节块,并写入buffer中stream.read(byte buffer,int offset, int count);buffer:存储在当前流中读取的字节块offset:读取字节块的起始位置count:读取字节块长度当需要发送的消息内容过大时,则需要将信息以块的形式进行读取然后进行发送操作,分块读取的代码设计如下:/将控件中的内容转成二进制流byte data=encoding.unicode.getbytes(richtextbox.rtf);/将二进制流存储到内存流中memorystream stream = new memorystream(data);/设置信息每块发送的长度int sendlen=1024;/整个信息的大小long sunlen=(stream.length);/设置信息发送的起始位置int offset=0; /分块获取信息while(sunlen0)sendlen=1024;/如果信息没有读取完if(sunlen=sendlen)/将长整型转换成整型sendlen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 卫校招生代理协议书
- 厨房器具转让协议书
- 卖楼合伙合同协议书
- 商品食品赔偿协议书
- 厂房出售合同协议书
- 吵架公约情侣协议书
- 2025京东网店转让合同模板
- 喷头销售合同协议书
- 包村收割小麦协议书
- 地库出售合同协议书
- 《大学生创业基础系列课程》课件-第4课-创业团队-2学时
- 初中生物会考100道易错选择题集锦
- 2024年广东佛山市三水海江昇平建设工程有限公司招聘笔试参考题库附带答案详解
- 《中医常用护理技术基础》课件-一般护理-第五节用药护理
- T-CI 179-2023 泥石流泥位流速毫米波雷达监测技术规程
- 地震逃生与自救培训课件
- 绿化及景观工程施工组织设计
- 劳模人物王进喜 (模板)
- 完整投标书字体与格式要求
- 2023年四川省眉山市殡仪馆招聘编外自聘临时人员7人考前自测高频考点模拟试题(共500题)含答案详解
- 皮肤病患者的心理护理
评论
0/150
提交评论