版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江科技学院信息与电子工程学院2007届本科毕业设计(论文)-PAGEIV-摘要即时通讯(InstantMessaging)是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。随着互联网的发展,即时通讯的运用将日益广泛。本文围绕即时通讯的基本文字交流功能,设计了管理在线用户,维护在线用户,实现文字通信的功能。本系统使用TCP和UDP协议作为传输层的协议,更加便捷了用户之间的通讯和交友。该系统为用户提供了一个集文字通信、在线信息、文件传输于一体的即时通信平台。经过几个月的项目开发、测试,本即时通讯系统现已可以正常运行。关键词:TCP/IP,C/S,Winsock,即时通信系统,VisualBasicABSTRACTInstantMessagingiscurrentlythemostpopularwaytocommunicateontheInternet,bythewayvariousInstantMessagingsoftwarehavebeencontinuouslyappearing;Serviceprovideroffersmoreandmorecommunicationservicesnowadays.AsthedevelopmentoftheInternet,InstantMessagingwillperformawideruseandisgrowingupdayafterday.Thisthesisisbasedonthefunctionofexchange,whichisthebasiccharacterofinstantmessagingsystem,onlineusersmanagement,safeguardingonlineusersandexchangemessagearecometrue.Thissystemhasofferedaninstantmessagingplatformincorporatingcharacterscommunication,onlineinformationandfiletransfer.Throughseveralmonthsdevelopandtestcycle,thisinstantmessagingsystemcanalreadyusedtorunnow.Keywords:TCP/IP,C/S,Winsock,InstantMessengerSystem,VisualBasic
目录摘要 IABSTRACT II第1章绪论 11.1研究背景及意义 11.2网络即时通信软件的现状 21.3本文的内容安排 3第2章实现网络即时通信软件的相关知识 52.1Winsock的原理 52.2TCP/IP协议的原理 62.3C/S结构的概述 72.4基于Socket通信的基本应用模式 82.5设计工具VisualBasic介绍 92.6本章小结 10第3章网络即时通信软件的设计 113.1即时通信系统的需求分析 113.1.1基本需求 113.1.2协议需求 113.1.3安全需求 113.1.4系统需求 123.2界面设计 123.3系统设计和功能的实现 143.3.1各模块的逻辑分析及设计 143.3.2系统代码的编写和功能的实现 193.3.3与服务器之间的通信 253.4本章小结 26第4章结论 274.1完成的工作 274.2存在的问题和未来的展望 274.2.1存在的问题 274.2.2未来的展望 27致谢 29参考文献 30附录1程序运行实例 31-PAGE39-第1章绪论网络通信是指两台或多台计算机相连接,通过网络协议实现互相通信、共享资源。客户机/服务器结构是目前最为流行的网络通信模式,当两台计算机建立连接时,服务器是运行在一方计算机上的应用程序,也称为宿主机,与其他计算机连接的服务,并为被连接的计算机提供数据;客户机是运行在另一方计算机上的应用程序,它请求与服务器连接。通常一台服务器可连接多台客户机。网络通信能使多台计算机间数据的传送变得便利、快捷,不再受到距离的限制。网络即时通信也应运而生。网络即时通信软件不仅能实现计算机之间数据的传输,而且可以实现计算机之间实时的文字、语音对话和图像、文件的传输。随着即时通信软件的发展和成熟,它的易用性和实用性也渐渐被广大的用户接受。1.1研究背景及意义互联网诞生于传统的电话网络,通讯交流可以说是互联网天然的应用之一。电子邮件就是最重要的通讯交流工具,是互联网最早的“杀手级应用”。此后兴起的网络论坛和网络聊天室都是网络聊天的前身。但是,个人对个人网络聊天的真正崛起还是需要从ICQ开始。国内来看,从2004年以来,即时通信成为互联网和电信行业最激动人心的热点。2004年6月,行业的主导服务商腾讯在香港成功上市。7月,网易在北京推出了新版的即时通讯软件网易泡泡2004,新浪斥资近两亿元收购UC即时通讯技术平台,搜狐也在年初推出即时通讯软件“搜Q”。作为电信运营商的中国电信和中国网通也动作频频。在国外,互联网行业引人瞩目的新星GOOGLE也在近几年推出自己的即时通信GoogleTalk,全球即时通信行业的老大ICQ也计划进入中国市场,一时间众者云集,让业界眼花缭乱。[2]即时通信系统是一种在后PC时代兴起的,以Internet网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时通信系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时通信软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时通信系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。1.2网络即时通信软件的现状经过近年来的不断发展,目前的IM软件不再局限于简单的通信功能,而是捆绑或拓展了越来越多的功能。从理论上讲,凡是互联网上成功的应用均可被IM软件一网打尽,目前比较通行的捆绑功能有浏览器、邮件、网络硬盘、搜索引擎、媒体播放器、RSS/网络日志等。基于IM软件强大的功能,IM运营商可以开展多种业务,比较典型的有通信类业务、娱乐性业务、商务性业务、广告业务、在线市场调查业务等等(见图1-1)。图1-1IM软件的功能及IM运营商对用户提供的业务不难看出,个人用户占据市场主体,企业用户潜力巨大,服务商势必在这个领域展开全新的争夺。图1-22005年中国即时通信市场个人及企业用户份额2005年中国互联网用户首次超过一亿人,达到10300万人。个人即时通信用户(不包括重复用户)也达到了8500万人,比2004年同期提高35.6%。2004年中国即时传输总产值是13.8亿元,占整个互联网产业的4.5%。2005年到达19.1亿元,比同期增长了38.4%,占整个互联网产业的4.6%。预计到2008年这一数字将达到40.4亿元。图1-32005-2008年即时通信传输市场规模1.3本文的内容安排本文的内容安排如下:第1章对流行的IM软件进行了追踪与分析,通过对目前一些通讯软件的现状分析,阐述了开发即时通讯软件的必要性和可行性;第2章对开发软件的技术基础进行了概述,主要围绕实现软件所需的系统结构、平台选取、以及一些技术方面的基本概念和基本思想;第3章介绍了软件(客户端)设计思路和概要设计,从总体上介绍软件的设计要求和软件实现的一些功能;第4章对整个软件设计进行了总结,并对软件存在的一些问题和未来发展提出了一些展望。第2章实现网络即时通信软件的相关知识2.1Winsock的原理Sockets最初只是UNIX系统中最流行的网络通信接口之一,它不支持微机DOS环境和MicrosoftWindows环境。Sockets在UNIX中成功的应用产生了将其移植到DOS和Windows环境下的设想。1992年制定出了WindowsSockets规范1.0版;但在实际使用过程中,发现了一些问题,因此由MartinHall领导的WindowsSockets委员会对1.0版作了一些修改,并于1993年推出1.1版规范。WindowsSockets是MicrosoftWindows的网络程序设计接口,它是从BerkeleySockets扩展而来的。WindowsSockets在继承了BerkeleySockets主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络事件异步选择机制。这些扩充有利于应用程序开发者编制符合Windows编程模式的软件,它使在Windows下开发高性能的网络程序成为可能。WindowsSockets实现一般都由两部分组成:开发组件和运行组件。开发组件是供程序员开发WindowsSockets应用程序使用的,它包括介绍WindowsSockets实现的文档、WindowsSockets应用程序接口(API)引入库和一些头文件。头文件WINSOCK.H是WindowsSockets最重要的头文件,它包括了WindowsSockets实现所定义的宏、常数值、数据结构和函数调用接口原型。运行组件是WindowsSockets应用程序接口的动态连接库(DLL),文件名为WINSOCK.DLL,应用程序在执行时通过装入它实现网络通信功能。[3]图2-1Socket的通信结构2.2TCP/IP协议的原理TCP/IP协议叫做传输控制/网际协议,它是Internet国际互联网络的基础。TCP/IP是网络中使用的基本的通信协议。
虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。[4]
TCP/IP协议的基本传输单位是数据包(datagram),TCP协议负责把数据分成若干个数据包,并给每个数据包加上包头(就像给一封信加上信封),包头上有相应的编号,以保证在数据接收端能将数据还原为原来的格式,IP协议在每个包头上再加上接收端主机地址,这样数据找到自己要去的地方,如果传输过程中出现数据丢失、数据失真等情况,TCP协议会自动要求数据重新传输,并重新组包。总之,IP协议保证数据的传输,TCP协议保证数据传输的质量。[5]TCP/IP协议数据的传输基于TCP/IP协议的四层结构:应用层、传输层、网络层、接口层,数据在传输时每通过一层就要在数据上加个包头,其中的数据供接收端同一层协议使用,而在接收端,每经过一层要把用过的包头去掉,这样来保证传输数据的格式完全一致。图2-2TCP报文封装TCP/IP协议四层结构的主要功能如下:网络接口层:负责接收和发送物理帧网络层:负责相邻节点之间的通信传输层:负责起点到终点的通信应用层:提供诸如文件传输、电子邮件等应用程序要把数据以TCP/IP协议方式从一台计算机传送到另一台计算机,数据需经过上述四层通讯软件的处理才能在物理网络中传输。2.3C/S结构的概述C/S结构(Client/Server结构)是大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。[6]图2-3客户端/服务器模式通信架构C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是针对性开发,变更不够灵活,维护和管理的难度较大。通常只局限于小型局域网,不利于扩展。并且,由于该结构的每台客户机都需要安装相应的客户端程序,分布功能弱且兼容性差,不能实现快速部署安装和配置,因此缺少通用性,具有较大的局限性。要求具有一定专业水准的技术人员去完成。2.4基于Socket通信的基本应用模式在基丁Socket构造TCP/IP网络应用时,通信双方常常构成客户端/服务器的模式,即客户向服务器发出服务器请求,服务器接收到请求后,提供相应的服务。服务与被服务都是通过传递各种请求消息、响应消息等一问一答的方式来实现灵活的网络应用。以有连接方式为例,客户端和服务器在通信过程中的基本操作和时序如图2-4所示:图2-4基于Socket应用的基本时序图在上述基本时序中,请求服务和提供服务的过程都可以反复进行,直到完成某个预定的应用功能。这样,通过基本消息传递,可以建立起灵活多样的网络应用。在实际设计的应用中,服务器往往不只服务于来自单个客户端的请求。此时,服务器接收到一个连接请求,并建立起了连接,接下来的处理还可以划分为两种截然不同的方式:1、是直接处理该请求并发送应答信息,然后再进行下面的工作。在服务器处理请求的过程忠,不可能再对另外的请求进行响应。只有当一个完整的服务过程完成后,程序再循环回到接收请求的地方,此时才又可以接收下一个请求。如此周而复始。这种方式叫做重复服务器,即一次只能处理一个服务请求。2、是每收到一个服务请求时,就激活一个新的进程(或线程)来专门处理这个客户请求。新建立的进程(或线程)从创建它的服务器继承了建立好的连接等资源,并使用这个建立好的连接与客户端进行通信,为客户端提供服务。而原来的服务器就可以立刻又回到等待请求的地方,可以接受下一个连接请求。新进程(或线程)中服务完成后,关闭自己与客户端的通信链路,并自行终止。这种方式叫做并发式服务器,即可以同时响应多个客户端的清求。[7]如果应用比较简单,客户端较少,同时发生请求的概率很低,或者客户端不介意等待服务的时间,可以采用重复服务器。而如果客户端较多,并对服务响应的要求较高,就应当采用并发服务器,这种方式可以满足大型和复杂应用的需求。如果使用无连接的模式,就不存存建立、断开连接等过程。但是通过基本信息传递实现提供服务的道理与有连接的模式是一样的。2.5设计工具VisualBasic介绍BASIC是Beginner'sAll-purposesymbolicinstructionCode(初学者通用符号指令代码)的缩写,是国际上广泛使用的一种计算机高级语言。BASIC简单、易学,目前仍是计算机入门的主要学习语言之一。BASIC语言的问世及发展BASIC语言自其问世经历了以下四个阶段:第一阶段:(1964年~70年代初)1964年BASIC语言问世。第二阶段:(1975年~80年代中)微机上固化的BASIC第三阶段:(80年代中~90年代初)结构化BASIC语言。第四阶段:(1991年以来)VisualBASIC1991年,微软推出了VisualBasic(简称VB)1.0版。这在当时引起了很大的轰动。许多专家把VB的出现当作是软件开发史上的一个具有划时代意义的事件。其实,以我们现在的目光来看,VB10的功能实在是太弱了。但在当时,它是第一个“可视”的编程软件。这使得程序员欣喜之极,都尝试在VB的平台上进行软件创作。微软也不失时机地在四年内接连推出VB2.0,VB3.0和VB4.0等三个版本。并且从VB3开始,微软将ACCESS的数据库驱动集成到了VB中,这使得VB的数据库编程能力大大提高。从VB4开始,VB也引入了面向对象的程序设计思想。VB功能强大,学习简单。而且,VB还引入了“控件”的概念,使得大量已经编好的VB程序可以被我们直接拿来使用,如今,VB已经有了6.0版。几个定义:在讨论VisualBasic时,经常可以听到这些术语,因此对这些术语的基本理解十分有帮助。控件:提供程序可见界面的可重用对象。控件的示例有文本框、标签和命令按钮。事件:由用户或操作系统引发的动作。事件的示例有击键、单击鼠标、一段时间的限制,或从端口接收数据。方法:嵌入在对象定义中的程序代码,它定义对象怎样处理信息并响应某事件。例如,数据库对象有打开纪录集并从一个记录移动到另一个记录的方法。对象:程序的基本元素,它含有定义其特征的属性,定义其任务和识别它可以响应的事件的方法。控件和窗体是VisualBasic中所有对象的示例。过程:为完成任务而编写的代码段。过程通常用于响应特定的事件。属性:对象的特征,如尺寸、位置、颜色或文本。属性决定对象的外观,有时也决定对象的行为。属性也用于为对象提供数据和从对象取回信息。[8]2.6本章小结本章主要介绍了设计过程中用到的一些相关的技术和原理,如TCP/IP和Winsock等。还有软件的设计平台的介绍,主要是编程工具VB的历史背景和相关的一些主要控件的介绍,为下面的设计奠定了一个良好的理论基础。第3章网络即时通信软件的设计3.1即时通信系统的需求分析3.1.1基本需求1、一般即时消息格式需求1)所有实体必须至少使用一种消息格式;2)必须定义发信者和即时收件箱的标识;3)必须包含一个让接收者可以回消息的地址;4)必须反映当前最好的可用性实践。2、可靠性需求协议必须存在机制,保证即时消息成功投递或者投递失败的时候,发信者获得足够的信息。3、性能需求1)传输必须足够的迅速;2)内容必须足够丰富;3)长度尽量足够长。3.1.2协议需求协议是一系列的步骤,它包括双方或者多方,设计它的目的是要完成一项任务。即时通讯协议,参与的双方或者多方是即时通讯的实体。协议必须是双方或者多方参与的,一方单独完成的就不算协议。这样在协议动作的过程中,双方必须交换信息,包括控制信息、状态信息等等。这些信息的格式必须是协议参与方同意并且遵循的。好的协议要求清楚,完整,每一步都必须有明确的定义,并且不会引起误解;对每种可能的情况必须规定具体的动作。3.1.3安全需求A发送即时消息M给B:1)如果无法发送,A必须接到确认;2)协议必须为B提供方法检查A发送了这条信息;3)协议不能暴露A的IP地址;4)协议必须为A提供方法保证没有其他个体C可以看到内容M;5)协议必须为A提供方法保证没有其他个体C可以篡改M。3.1.4系统需求1、注册需求1)即时通讯系统拥有多个账户,允许多个用户注册;2)一个用户可以注册多个帐号;3)注册所使用的帐号类型为数字;4)要防止同一个用户在一段时间内反复注册三个或者三个以上的帐号。2、通讯需求1)用户可以传输文本消息;2)用户可以传输RTF格式消息;3)用户可以传输文件;4)客户端与服务器端可以传输消息。3、好友管理需求1)用户可以查询好友;2)用户可以添加好友;3)用户可以添加多个人为好友,一个用户可以被多个人添加为好友;4)用户可以删除好友。3.2界面设计用户界面是一个应用程序最重要的部分,对用户而言,界面就是应用程序,他们感觉不到幕后正在执行的代码。不论花多少时间和精力来编制和优化代码,应用程序的可用性仍然在很大程度上依赖于界面的好坏。VisualBasic采用在窗体上拖曳控件的方式为创建用户界面提供了非常简便的方法,窗体的设计和规划不仅影响到它本身外观的可观赏性,而且对应用程序的可操作性也起到很重要的作用.一个良好的用户界面并不是只有专业的美术人员才能设计出来,在大多数时候,这样的界面设计都是由程序设计人员完成,因此了解用户界面的设计原则,是每个程序设计人员都要做的事情。[9]本软件包含10个窗体和5个模块,基本上这些窗体的实现的功能都比较简单,所以窗体里也不用多少个控件,在这里就主要介绍下登录界面和主界面的设计要点。登录界面这是用户使用此软件首先看到的一个界面,所以对用户来说这个界面的可用性和美观性直接影响到对整个软件的看法。首先暂且给此软件命名为MY-IM,这样听起来比较直观吧!想要在登录的窗体标题上显示“MY-IM登录”,只要把窗体属性的Caption值改成“MY-IM登录”即可。同时也可以在文字前加上图标(图中没有添加),这样就显得有点特色。然后把窗体分成两部分:操作方法文本说明和用户信息输入的控件放置。为了美观起见,在文本说明输入的前面加上一个图标(如图3-1的“”);然后再输入“欢迎使用MY-IM”和使用该软件的方法。最好把这两块文本分成两个标签,因为这样的话后面程序用到的时候显示得就比较清晰明了。另一部分要使用到的控件有标签、文本框、复选框和按钮。“用户名”、“密码”和“服务器IP”这三组文字使用的是标签控件,因为这三组文字不需要改动,只是提示用户后面文本框内需要输入的相应内容。和下面的“记住密码”用的都是复选框控件,同时为了方便用户,把复选框放在输入用户名后,这样用户就可以及时地确认自己是否为新用户,减少了输入的错误。“记住密码”也一样。其他两个是按钮,用户输入好信息后,如果没错误,按继续按钮就可以进入主界面;如果不需要登录,按关闭就可以退出程序。按此步骤设计完成大致的图如3-1所示:图3-1MY-IM登录界面主界面主界面是程序的核心,各个功能都是通过这个界面来连接完成的。这个窗体主要通过菜单控件来完成,总共包括三个菜单项:文件、工具和帮助。文件菜单里又包括登录、修改密码、修改个人信息、报表、个人状态和关闭。登录项在用户登录后显示的是“注销”;点击修改密码就会弹出修改密码的窗体;修改个人信息就会弹出个人信息的窗体;报表的窗体里包括发送给服务器错误、评论及投诉的报表;个人状态显示的是用户目前的状态,分别用几种颜色来表示:绿色表示在线,红色表示忙碌,黄色表示离开,灰色表示隐身或离线。关闭就是关闭此软件。工具菜单里包括发送消息、用户信息、文件传输和添加删除好友。这些都是通过调用相关的窗体来实现的。帮助菜单里显示的是关于此软件的一些说明。其他的有两个快捷的按钮,分别是用来发送和选择用户状态的按钮,因为想要在这两个按钮上添加图标,所以写上了“图标”两个字,下图只是表达一种效果;显示登录的用户自己的用户名和用户目前的状态的标签及显示好友列表的Treeview控件,这个控件的参数要在程序里设置,所以这里没有添加相关的内容;还有状态栏,用来显示各种提示的信息。根据这样的思路,再对界面进行一定的整合和排列后就得到如图3-2这样的效果。图3-2软件主界面3.3系统设计和功能的实现3.3.1各模块的逻辑分析及设计前面介绍了软件界面的设计,但光有界面还是远远不够的,这样不能实现任何的功能,所以还需要很重要的后台支持,这个后台就是程序代码。下图给出的是软件的整体设计框架,这个软件实现的功能都可以从图中看出,下面就先来对各个模块进行分析和代码编写流程的设计。图3-3软件的整体设计框架用户登录模块。拥有合法(如:用户名中不能包含空格等)用户名的用户,输入与上次相同的密码(如果是新用户,只要在用户名后选择新用户即可。注意:密码中也不能包含空格!),然后输入对应的服务器IP地址就可以通过客户端登录到服务器,服务器获取客户端的用户名和网络环境数据,保存在用户数据表中。客户端登录之后,将从好友数据表中读取好友,从在线用户数据表中读取在线用户信息,从用户基本信息数据表读取好友基本数据。[10]下面先给出用户登录的逻辑图,如图3-4所示。图3-4用户登录逻辑过程根据图3-4的逻辑过程,我们可以对用户登录模块的代码进行编写,代码的编写流程图如图3-5所示(这里默认服务器已经开启,并且输入的服务器IP地址正确)。图3-5登录模块代码编写流程图2、个人信息修改模块首先向服务器发送修改个人信息的请求给服务器,服务器根据用户名和相应的指令查询用户的个人信息,然后调用服务器中存储的用户信息,显示在用户个人信息的窗体中,用户如果要修改资料,就把用户修改的资料保存下来存到服务器中,用户也可以直接看到自己的信息已经被修改了。个人信息修改逻辑过程如图3-6所示。图3-6用户信息修改逻辑过程密码修改模块用户首先要记住自己的密码,这样也可以防止被他人随意修改。同时为了保证用户输入的密码是否符合用户的要求,再输入一次确认密码就可以保证密码是用户想要修改的结果,然后保存,同时向服务器发送密码修改的请求,服务器就把修改后的密码保存下来。密码修改模块代码编写流程图如图3-7所示。图3-7密码修改模块代码编写流程图发送报表模块报表包括三类:错误、评论和投诉。首先拉一个文本框,还有三个按钮,如果要发送,只需要在文本框中输入要发送的内容,然后选择一个按钮进行发送,这样,代码里只要输入指令和相应的内容发送给服务器即可,发送完后清空文本框内容,隐藏此窗体。5、删除好友模块用户删除好友时,用户在好友列表中选择删除对象并执行删除操作,系统会把该好友从好友列表中删除,然后从好友数据表中删除该用户的好友记录,就完成了好友删除操作。删除好友模块逻辑过程如图3-8所示。图3-8删除好友模块逻辑过程6、添加好友模块输入用户名后检查是否存在此用户,向服务器发送添加好友的指令和好友用户名,服务器把好友添加到用户好友数据表中,好友显示在用户好友列表里,同时显示好友目前状态。添加好友模块逻辑过程如图3-9所示。图3-9添加好友模块逻辑过程7、发送消息模块先选择要发送的对象,然后在RichText里输入要发送的信息,从字体中选择您想要的效果(可以对部分文字进行设置,这样就可以突出一些关键字),发送指令、输入的信息及待接收的好友用户名给服务器,然后通过服务器再转发给待接收的好友。发送消息模块逻辑过程模块逻辑过程如图3-10所示。图3-10发送消息模块逻辑过程8、接收消息模块显示好友发送的消息,同时显示发送的好友用户名。如果要回复就输入回复的信息,加上发送者用户名,然后通过服务器转发给对应的好友。9、文件传输模块。这是即时通信软件中添加的比较实用的功能。先选择要传输文件的好友,然后通过服务器获得对方的IP地址,选择要发送的文件,准备进度条,然后等待对方确认接收,对方确认选定文件保存路径后就可以开始接收,进度条就开始滚动,直到接收方完全接收完文件,发送方同时也显示文件完全发送,这样文件传输就完成了。文件传输过程中不需要服务器的干预,本程序要实现的只是简单的文本文件传输,而且是使用Winsock来通信,所以能传输的文件比较小。文件传输模块逻辑过程如图3-11所示。图3-11文件传输模块逻辑过程3.3.2系统代码的编写和功能的实现1、用户登录模块这个模块需要完成用户身份验证、是否为新用户、是否保存密码三个方面的处理。首先要做的是判断输入的用户名、密码是否符合规定的格式,代码如下:IfInStr(1,Text1.Text,Chr(32))OrInStr(1,Text2.Text,Chr(32))ThenMsgBox"您的用户名和密码中不允许有空格,请重新输入!"ExitSubEndIfIfText1.Text=""ThenMsgBox"请输入您的用户名!"ExitSubEndIfIfText2.Text=""ThenMsgBox"请输入您的密码!"ExitSubEndIfIfText3.Text=""ThenMsgBox"请输入服务器IP地址!"ExitSubEndIf服务器IP指的是作为服务器的机器的IP,同时要和作为服务器的机器处于同一个局域网中。同时服务器还要判断用户输入的用户名是否存在或是否被服务器处理了,如冻结帐号;判断输入的密码是否和服务器上次记录的密码对应。如果选择了新用户,说明服务器中没有用户的信息,那系统就会给新用户创建一个文件来存储用户信息。先对信息中的Name、Sex、Country等进行初始化,保存在一个文件里面,如果用户对信息进行修改,那么这个文件中存储的信息也相应地改变。代码如下:MyPersonalInfo.Name=NicknameMyPersonalInfo.Sex="男"MyPersonalInfo.Country="中华人民共和国"MyPersonalInfo.BirthDay="1984.1.1"MyPersonalInfo.Age="24"MyPersonalInfo.Mail="j123@126.com"MyPersonalInfo.About="空空如也"Open"Info_"&Nickname&".dat"ForRandomAsgFileNumLen=Len(MyPersonalInfo)Put#gFileNum,1,MyPersonalInfoClose#gFileNum如果选择了保存密码,系统就会给用户创建一个INI文件来保存设置,如果没有选择保存密码,则会判断出错,提示“调用API函数时发生错误”,但对整个程序并没有什么影响。SaveINI是模块中定义的公用函数,如果具体代码如下:PublicSubSaveINI()DimlngResultAsLongDimstrFileNamestrFileName=App.Path&"\Settings.ini"'Declareyourinifile!lngResult=WritePrivateProfileString(KeySection,_KeyKey,KeyValue,strFileName)IflngResult=0Then'出现错误CallMsgBox("调用API函数时发生错误",vbExclamation)EndIfEndSub个人信息修改模块[11]首先要做的是打开信息修改这个窗体时要调用服务器中存储的用户信息,可由gFileNum=FreeFile这句代码来实现,如果用户要修改信息,那信息修改完成后要保存起来,然后通过发送指令和相应的内容给服务器,实现的代码如下:DimTemp4AsStringTemp4=Replace(RichTextBox1.Text,vbCrLf,"//crlf\\")MyPersonalInfo.Name=Text5.Text'保存修改的信息MyPersonalInfo.Sex=Combo1.TextMyPersonalInfo.Country=Text1.TextMyPersonalInfo.BirthDay=Text2.TextMyPersonalInfo.Age=Text3.TextMyPersonalInfo.Mail=Text4.TextMyPersonalInfo.About=Temp4Open"Info_"&Nickname&".dat"ForRandomAsgFileNumLen=Len(MyPersonalInfo)Put#gFileNum,1,MyPersonalInfoClose#gFileNumMyIM.Winsock1.SendData".SaveInfo"&Connect.Text1.Text&""&Combo1.Text&""&Text1.Text&""&Text2.Text&""&Text3.Text&""&Text4.Text&""&Text5.Text&""&Temp4Me.Hide密码修改模块首先要判断输入的原始密码是否正确,再判断输入的修改后的密码和确认密码是否一致,如果正确那就保存修改后的密码,然后发送给服务器,对各个文本框置空,实现的代码如下:PrivateSubbtnChange_Click()IfText1.Text<>MyPwdThen'如果输入的初始密码和登录时输入的不一样则跳出提示框MsgBox"您输入的旧密码不正确!"ExitSubEndIfIfText2.Text<>Text3.TextThen'如果修改后的密码和确认密码不一样则跳出提示框MsgBox"两次输入密码不符,请重新输入!"ExitSubEndIfIfText2.Text=""ThenMsgBox"密码无修改!"ExitSubElseMyPwd=Text2.Text'密码正确修改后就把Text2中的内容替代原来的密码MyIM.Winsock1.SendData".ChangePassword"&""&Text2.TextEndIfText1.Text=""'置空Text2.Text=""Text3.Text=""Me.HideEndSub发送报表模块[12]主要是三个方面的选择:评论、错误和投诉,选择了确定的安钮之后,就可以向服务器发送信息了,再对文本框置空,实现的代码如下:MyIM.Winsock1.SendData".ReportComplaint"&Text1.TextText1.Text=""Me.Hide删除好友模块从好友列表中选择要删除的好友,发送指令给服务器即可,代码如下:PrivateSubmnuBuddyRemove_Click()OnErrorResumeNextWinsock1.SendData".RemoveBuddy"&TreeView1.SelectedItem.KeyEndSub添加好友模块首先要对待添加的用户进行验证,判断这个用户是否存在,添加了之后再好友列表中要显示该添加的好友,服务器中也要进行相应的保存,代码如下:PrivateSubmnuBuddyAdd_Click()DimTempAsStringTemp=InputBox("请输入好友名字!","添加好友","Buddy")'提示标题默认的文本框内容IfTemp=""ThenExitSubElseWinsock1.SendData".AddBuddy"&Connect.Text1.Text&""&TempEndIfEndSub发送消息模块这个模块要实现的功能有设置字体、消息输入框(即RichTextBox1)大小的变化及消息的发送,字体包括大小、粗体、斜体和下划线等,在这里就不列举代码了。下面给出消息输入框大小随窗体改变的代码:RichTextBox1.Height=Me.ScaleHeight-Picture2.Height-850RichTextBox1.Width=Me.ScaleWidth这样就可以实现当窗体变化时,消息输入框也随着变化,不然就算把窗体拉大,消息输入框也不可能增大,那就达不到用户想要的效果。消息发送其实就把输入的文字加上指令及接收者给服务器就可以,服务器再转发给接收方,所以客户端要做的由这句代码就可以实现:RichTextBox2.Text=".msg"&Replace(RichTextBox1.TextRTF,vbCrLf,"//crlf\\")&""&RecieversID接收消息模块与发送消息模块不同的就是接收消息要实现的一个功能是显示新消息,不过消息的显示是自动弹出式的,所以不需要编写代码;还有一个就是回复,其实按回复的按钮直接就弹出一个发送消息的窗体就可以了,由下面两句代码来实现:DimNewSendMessageAsNewSendMessageNewSendMessage.ShowNewSendMessage就是创建SendMessage这个窗体的实例。同时也要显示发送方的用户名,由这句代码NewSendMessage.Label2.Caption=SenderName来实现。10、文件传输模块因为文件的接收和发送是一个完成的过程,所以我们把接收和发送文件穿插起来一起描述。这两块主要需要实现的有进度条的滚动、发送文件信息和对方接收文件等功能。进度条初始值为0,当文件开始传输时,进度条根据发送的文件字节数,调整进度条,同时显示文件发送的程度(如100%),代码如下:ProgressBar1.Max=sizeOfFileProgressBar1.Min=0ProgressBar1.value=ProgressBar1.MinProgressBar1.Visible=TruesizeOfFileSent=sizeOfFileSent+blockSizeOnErrorResumeNextProgressBar1.value=sizeOfFileSentcompLabel.Caption=sizeOfFileSent&"/"&sizeOfFile&"发送."&Int(sizeOfFileSent/sizeOfFile*100)&"%"DoEvents因为要计算文件发送的程度,所以务必要知道文件的长度,同时发送方还会附上文件名及发送方用户名,下面几句代码可以表示:sckSystem.SendDataFILE_NAME&nameOfFilesckSystem.SendDataFILE_SIZE&sizeOfFilesckSystem.SendDataUSER_NAME&userName发送方通过网络协议传送给接收方,接收方接收发送方的请求,找到对应的端口同时进行监听,获得文件信息,保存文件,具体实现的代码如下所示:Temp=MsgBox("接受来自"&userName&"的"&nameOfFile&"文件("&sizeOfFile&"比特)"&"?",vbYesNo,"传输"&nameOfFile&"?")IfTemp=vbYesThensckReceive.ClosesckReceive.LocalPort=hostPort+4'PorttomonitorsckReceive.ListenDoEventsCommonDialog1.fileName=nameOfFileCommonDialog1.ShowSave3.3.3与服务器之间的通信客户端和服务器之间的通信包括客户端发送报表给服务器及服务器发送私聊、系统消息给客户端,主要是通过相互发送指令来实现的。本人主要做的是客户端,所以只要在客户端和服务器端通过一定的端口连接上后,客户端通过指令把报表内容发送给服务器(如图3-12),而其他的一些需要与服务器端交互的操作都可以通过发送指令来实现。服务器显示客户端发送的报表如图3-13所示。代码:PrivateSubCommand2_Click()MyIM.Winsock1.SendData".ReportBug"&Text1.TextText1.Text=""Me.HideEndSub客户端:图3-12客户端发送报表给服务器服务器端:图3-13服务器显示客户端发送的报表3.4本章小结首先介绍了软件设计的需求分析,然后再根据需求来设计软件界面及要实现哪些功能,再对这些功能进行分析,总结出实现这些功能的流程,及如何编写代码才能实现功能,最后简单介绍了客户端与服务器之间如何进行通信。第4章结论4.1完成的工作本即时通信系统采用了C/S模型。在参考了书上的即时通信软件的基础上增加和修改了一些功能:如密码窗体的修改,原来的密码修改就是输入新密码,而且界面上直接显示出来,经过修改,增添了输入旧密码和输入确认密码,同时把密码全部显示成星号;还添加了用户名的显示,修改界面使更个性化等。经过测试,在同一个局域网内两台电脑可以互相通信,客户端可以添加大量的好友,并且多个好友互相之间能同时进行通信,可以进行文本文件的互相传输,可以发送报表给服务器。4.2存在的问题和未来的展望4.2.1存在的问题由于时间仓促,能力有限,本系统还存在着一些问题需进一步完善,比如对于视频、音频文件等的传输都没有实现,还有系统安全之类的问题本系统都没有进行讨论,这些都是以后需要完善和改进的地方。1、安全性不高目前很多即时通信工具都受病毒的侵害,而且病毒的种类也日新月异,想要制作一款能高效抵制病毒的软件还是需要很大的工作量,因此本文也没怎么谈论网络安全。2、只能传较小的文本文件VB也是刚接触不久,对一些控件也只是初步地了解了功能,所以只能做一些最基础的文本文件传输,以后还有待于提高。3、不能和其他的即时软件通信因为采用的是不同的协议,其实目前很多即时通信软件都不能相互进行通信,所以给用户带来很大的不便,利益是其中最大的因素。4.2.2未来的展望本人由于时间能力有限,所以实现的软件功能还是很少,不过也认识到一些即时通信未来的动向,再根据相关研究的报道,归纳出即时通信未来将会呈现的几大趋势:1、添加语音/视频从目前流行的即时通讯软件基本都集成了语音和/或视频通讯的功能,应该讲这是即时通讯系统软件的一个发展的必然趋势和阶段。这是因为近年来,随着计算机网络技术迅猛的发展,以多媒体通信为主体的信息网络成为世界关注的热点。尤其是随着基干TCP/IP协议簇的因特网的高速发展,IP网络己经在全世界构筑了一个可以实现信息互通的统一平台,以IP技术为核心的分组化和以移动通信为核心的无线化己经取代电路交换技术而成为电信网络发展的主流方向。2、与电子邮件整合将成为业务推广的主流事实正是如此,IM软件如今大都捆绑了电子邮件,并支持邮件到达的即时提示,这代表着一种IM与电子邮件日益融合的趋势。3、多功能化将成为即时通信工具差异化竞争的主要手段从某种意义上讲,现在的IM不能再被称为即时通信软件,它几乎能捆绑互联网上各种流行的应用,它既可以是RSS信息聚合器,也可以是浏览器、搜索引擎,也可以是网络硬盘等,而即时通信只是其众多功能中的一项。当然,它是一项最为基础和基本性的功能,也是人们仍将其称为即时通信软件的主要理由。4、跨平台将是即时通信业务发展的必由之路 跨平台也是IM软件发展演变的一大趋势,这不仅表现在IM软件通常可以在不同类型的操作系统平台上运营并且互通,而且更多地表现在,IM软件的网络承载平台已经由最初的互联网拓展到了电信网甚至广电网,并且它们之间能够实现互通。这种跨平台通信的特性有助于IM在未来成为通信的核心,并整合其它通信方式,为用户提供真正的综合通信解决方案。致谢在此首先要感谢我的导师郭招娣老师,在程序的准备和设计阶段,她给我提供了很多相关实用的资料;在论文的格式和内容方面给我了很多有用的意见。感谢家人给我这个上大学的机会,让我的知识更加充实;感谢家人对我的支持,让我顺利地完成我的学业。还要感谢的是郑文静和其他同学,在整个设计的过程中,大家都给了我各方面的帮助。参考文献[1]孔鹏.即时通讯系统的研究与实现[D].山东:中国学术期刊杂志社,2006[2]王晶,李威.2004年国内外即时通信市场研究报告[J/OL].,2004[3]吴志坚,温文.利用WinSock实现实时通信的新方法[J].襄樊职业技术学报.2006,5(2):5~6[4]周明天,汪文勇.TCP/IP网络原理与技术[M].北京:清华大学出版社,2001:121~150[5]郭川军,秦洪杰.基于TCP/IP网络通讯系统的研究[J].信息技术,2006,(5):153~154[6]强建国,马晓,杨东亚.用Windows套接字实现双向Internet实时通讯[J].兰州理工大学学报,2005,31(5):99~101[7]朱蓉.基于TCP/IP协议的网络通信模式的实现[J].嘉兴学院学报,2006,18(5):80~81[8]罗朝盛.VisualBasic6.0程序设计教程[M].北京:人民邮电出版社,2002:347~390[9]宋国龙.浅谈即时通讯软件的开发技术[J].\o"山西电子技术"山西电子技术,2003,(2):1~2[10]朱玲华.基于图形的即时通信系统研究[D].北京:中国学术期刊杂志社,2003[11]曹衍龙.VisualBasic系统开发实例精粹[M].北京:人民邮电出版社,2005:461~461[12]AnthonyJones.NetworkProgrammingforMicrosoftWindows
[M].第二版.北京:机械工业出版社,2000:101~163[13]JAMESF.KUROSE,KEITHW.ROSS.ComputerNetworks[M].第三版.北京:清华大学出版社,1998:340~390附录1程序运行实例附图1-1用户登录界面附图1-2程序主界面附图1-3查看好友信息界面附图1-4密码修改界面附图1-5文件发送界面附图1-6发送报表界面附图1-7好友添加界面附图1-8用户信息修改界面附图1-9消息发送界面附录2部分程序清单'***************发送文件***************PrivateSubsckSystem_DataArrival(ByValbytesTotalAsLong)blockSize=2048DimtempComDataAsStringsckSystem.GetDatatempComData,vbStringDimCommandAsStringCommand=Mid(tempComData,1,1)'MsgBoxCommandIfCommand=CANCEL_TRANSFERThenstopSendingEndIfIfCommand=ENABLE_STARTThenCommand1.Enabled=TrueEndIfIfCommand=ACCEPT_TRANSFERThenDoEventssckSend.ConnectDoUntilsckSend.State=sckConnected'等待直到连接上DoEventsLoopGoToBeginTransferEndIfIfCommand=CONTINUE_TRANSFERThen'OnErrorGoToErrorHandler'最后调整块长度这样就可以不用读取太多数据IffileLength-Loc(hIn)<=blockSizeThenblockSize=fileLength-Loc(hIn)+1EndIfTemp=Space$(blockSize)'分配读取缓存GethIn,,Temp'读取数据块ret=DoEvents()'核查取消按钮事件等IfquitNowThenGoToendItsckSend.SendDataTemp'//Offitgoes'更新进度条sizeOfFileSent=sizeOfFileSent+blockSizeOnErrorResumeNextProgressBar1.value=sizeOfFileSentcompLabel.Caption=sizeOfFileSent&"/"&sizeOfFile&"发送."&Int(sizeOfFileSent/sizeOfFile*100)&"%"DoEventsIfsizeOfFileSent>=sizeOfFileThencancel.Caption="关闭"sckSystem.SendDataCLOSE_TRANSFEREndIfExitSubEndIfIfCommand=CLOSE_TRANSFERThenGoToendItExitSubBeginTransfer:'OnErrorGoToErrorHandlerhIn=FreeFileOpenpathToFileForBinaryAccessReadAshInfileLength=LOF(hIn)'Adjustblocksizeatendsowedon'treadtoomuchdataIffileLength-Loc(hIn)<=blockSizeThenblockSize=fileLength-Loc(hIn)'+1EndIfTemp=Space$(blockSize)'//AllocatethereadbufferGethIn,,Temp'//Readablockofdataret=DoEvents()'//Checkforcancelbuttoneventetc.IfquitNowThenGoToendItsckSend.SendDataTemp'//Offitgoes'updateprogressbarsizeOfFileSent=sizeOfFileSent+blockSize'OnErrorGoToendIt'//ProgressBar1.value=sizeOfFileSentcompLabel.Caption=sizeOfFileSent&"of"&sizeOfFile&"sent."&Int(sizeOfFileSent/sizeOfFile*100)&"%"IfsizeOfFileSent>=sizeOfFileThencancel.Caption="Close"sckSystem.SendDataCLOSE_TRANSFEREndIfExitSubErrorHandler:'//AlwaysclosethefilehandleClosehIn'SendFile=FalseendIt:'cancel.Caption="Close"sckSend.Close'thisseveresthedataconnection,causingtheclienttosave/endthefileClosehInMsgBox"完成传输!"UnloadMeEndSub'*************Winsock1接收数据时进行的操作************PrivateSubWinsock1_DataArrival(ByValbytesTotalAsLong)IfWinsock1.State=7Then'判断服务器是否连接上DimServerCommandAsStringWinsock1.GetDataServerCommand'ServerCommandIfWord(ServerCommand,1)=".FillOutForm"ThenfrmSetInfo.ShowConnect.HideEndIfIfWord(ServerCommand,1)=".ClearIgnoreList"ThenfrmIgnore.List1.ClearIfWord(ServerCommand,1)=".AddIgnore"ThenfrmIgnore.List1.AddItemWord(ServerCommand,2)IfWord(ServerCommand,1)=".Connected"ThenConnect.Label1.Caption="改变用户名和密码..."DimTemp2AsStringIfConnect.Check1.value=1ThenTemp2="Yes"ElseTemp2="No"EndIfWinsock1.SendData".login"&Connect.Text1&""&Connect.Text2&""&Temp2EndIfIfWord(ServerCommand,1)=".LogOff"ThenmnuFileToggleLog.Caption="登录"Winsock1.CloseBuddyUpdater.Enabled=FalseCommand1.Enabled=FalseCommand2.Enabled=FalseLabel1.Caption="离线"TreeView1.Nodes.ClearmnuBuddyMessage.Enabled=FalsemnuStatus.Enabled=FalseEndIfIfWord(ServerCommand,1)=".AlreadyOnList"ThenMsgBox"这个用户名已经存在!"EndIfIfWord(ServerCommand,1)=".UserInfo"ThenDimNewfrmInfoAsNewfrmInfoNewfrmInfo.Caption="Infoon"&RemoteNickNewfrmInfo.Text1.Text=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年个人借款协议印花税处理办法
- 2024年专业电缆敷设服务协议一
- 2024年住宅区拆迁改造工程承包合同版
- 2024年云服务提供商之间的合作协议
- 江南大学《高级英语(1)》2023-2024学年第一学期期末试卷
- 江南大学《电路与电子技术B1》2021-2022学年第一学期期末试卷
- 2024年全球贸易销售条款详细协议版B版
- 2024企业内部承包经营的合同范本
- 暨南大学《运筹学》2021-2022学年第一学期期末试卷
- 暨南大学《社会科学通论》2021-2022学年第一学期期末试卷
- 辽宁省2024年中考数学试卷
- 运输组织学智慧树知到答案2024年北京交通大学
- 工厂品质考试试题及答案
- 人教版八年级物理《透镜及其应用》经典习题(附答案)
- 国家开放大学《中文学科论文写作》形考任务1-4参考答案
- (高清版)TDT 1071-2022 园地分等定级规程
- 2024年纳税服务条线专业知识考试题库(含答案)
- 世界各国国家代号、区号、时差
- 山东输油管线工程长输管道施工技术方案(附施工图)
- 共享单车企业内部控制反思——以ofo为例论文设计
- (完整版)基础护理学简答题答案
评论
0/150
提交评论