企业网上寻呼系统的设计与实现毕业论文.doc_第1页
企业网上寻呼系统的设计与实现毕业论文.doc_第2页
企业网上寻呼系统的设计与实现毕业论文.doc_第3页
企业网上寻呼系统的设计与实现毕业论文.doc_第4页
企业网上寻呼系统的设计与实现毕业论文.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要随着网络技术的不断进步和网络成本的不断降低,大多数企业都在铺设网络,购置终端和服务器,实现网上互联.建立企业网上寻呼系统,发挥网络优势,促进信息交流,是企业的信息化建设不可或缺的重要组成部分.企业网上寻呼系统是在企业网络系统建立和网络技术成熟的基础上开发设计的利于企业员工信息交流的工具.实现企业网上寻呼系统的目的就是使企业员工之间的信息交流更加省时、方便、充分、提高企业的办公效率.该系统是一个典型的客户机/服务器系统,在客户机端程序完成用户的注册、登录、发送消息、接受消息等;在服务器端程序完成客户端信息的处理,包括注册、登录、消息等不同人物的处理.本系统用Access建立系统所需的数据库,用Visual Basic1创建了系统所需的各模块.关键词:中间件 客户机/服务器 寻呼 The Design and Implementation of Seek-calling System on the Enterprise NetAbstract:With the improvement of the network technique and the reducement of network cost continuously,majority business enterprises are all building the network,purchasing the terminal and the server in order to realize net conjunction with each other.Establishing the enterprise seek-calling system on the net,developping the network advantage,promoting the information exchanges,making the information of the business enterprise are very important parts in the course of the information construction. Seek-calling system on the net is based on the foundation of enterprise network system and the maturity of the network technique which is favor to the communication between the workers.The purpose of the implementation of the seek-calling system on the net is to save the time on information exchanges,convenience,well,so that it can increase the business enterprise efficiency of transacts .The system is a typical client/server system. At the user side,the system complete the users registration,login,send out the information and accept information etc.At the server side,the system complete the management of the users information which includes the registration,login,send the information from different person etc.This system establishes the database for needing with the Access and take the Visual Basic computer languages development tool. KeyWords:Middle-Ware a client/server machine seek-calling目 录中文摘要、关键词(1)1、引言 (2)2、系统介绍 (2)2.1 客户机服务器模型介绍(2)2.2 Winsock编程原理(5)3、需求分析(9)4、系统设计(10)4.1 功能分析 (10)4.2 模块设计 (11)5、数据库设计(12)5.1 服务器数据库 (12)5.2 客户端数据库 (14)6、通信模块设计(14)7、服务器端设计(16)8、客户端设计(23)9、系统运行(36)总结致谢 (38)参考文献 (40)英文摘要、关键词 (42)1 序言1.1研究背景20世纪70年代至80年代,计算机网络的应用只局限于一些大型企业、公司、校园与研究部门.只有在微型计算机普及之后,人们才看到微型计算机联网后所产生的重大影响,计算机网络开始越来越来普及.到了20世纪90年代,以Internet为代表的信息技术革命深刻地改变了人们传统的生活方式,其迅猛发展的速度是人类工业化进程中前所未有的.传统的以电话业务为主,采用电路交换技术的数据通信模式已不能很好地满足信息时代的需求,而新一代的可持续发展的网络数据通信系统才是人们的首选,通过网络互连实现的数据通信模式已成为当代信息传递的主流.随着计算机网络和数据库技术的高速发展,特别是客户端服务器体系结构的逐步成熟,建立新一代的企业级计算机网络信息系统的条件已经具备.以先进的技术和众多的产品为手段,进行全面的统一的总体规划,构筑实用可靠的计算机网络数据通信系统,已经成为每个大型企业、机关、院校必不可少的重要组成部分。1.2研究目的和意义随着网络技术的不断进步和网络成本的不断降低,大多数企业都在铺设网络,购置终端和服务器,实现网上互联.建立企业网上寻呼系统,发挥网络优势,促进信息交流,是企业的信息化建设不可或缺的重要组成部分.企业网上寻呼系统是在企业网络系统建立和网络技术成熟的基础上开发设计的利于企业员工信息交流的工具.实现企业网上寻呼系统的目的就是使企业员工之间的信息交流更加省时、方便、充分、提高企业办公效率.该系统是一个典型的客户机/服务器系统,在客户机端程序完成用户的注册 登录随着网络技术的不断进步和网络成本的不断降低,大多数企业都在铺设网络,购置终端和服务器,实现网上互联.建立企业网上寻呼系统,发挥网络优势,促进信息交流,是企业的信息化建设不可或缺的重要组成部分.企业网上寻呼系统是在企业网络系统建立和网络技术成熟的基础上开发设计的利于企业员工信息交流的工具.实现企业网上寻呼系统的目的就是使企业员工之间的信息交流更加省时、方便、充分、提高企业的办公效率.该系统是一个典型的客户机/服务器系统,在客户机端程序完成用户的注册、登录、发送消息、接受消息等。 。2、系统介绍2.1 客户机/服务器模型介绍企业网上寻呼系统是一个典型的客户机/服务器系统.2.1.1 客户机/服务器模型概述 在Client/Server4计算模式中,一个或多个客户机与一个或多个服务器,以及支持客户机、服务器进程通信的网络操作系统共同组成了一个分布式计算、分布式处理的系统.在Client/Server计算模式中,应用可以分为以下两部分:(1)前端的客户机部分(2)后端的服务器部分客户机提出服务要求,网络将用户请求传送到服务器;服务器执行用户请求,完成所要求的操作并将结果回送用户.2.1.2 客户机/服务器中的中间件中间件的基本概念Client/Server12模式与传统的资源共享模式相比,具有以下几个优点:网络通信量减少,响应时间短,网络能为用户提供更好的服务质量;通过将一个应用程序分别运行在网络互联的服务器与客户机上,可以充分发挥客户机与+服务器双方的功能,组成一个有效的分布式应用环境;通过将应用程序与它们所处理的数据隔离,可以使数据具有很好的独立性,可以方便的开发新的应用.将数据存放在服务器中,服务器可以对数据放在服务器中,服务器可以对数据访问实现有效的管理与控制,未授权用户无法对数据进行非法访问,系统数据的完整性得到了很好的保护;由于客户机有自己的管理用户界面,因此每个服务器可以支持更多的用户.尽管Client/Server模式有很多优点,但是对于大多数从事应用程序开发的程序员来说,编写跨平台、多协议、多编程语言的网络应用软件仍然是一件相当困难的工作.同时,如果程序员需要针对底层网络协议来编写应用程序的话,也会带来以下这两个明显的问题;(1) 程序过多地依赖底层网络技术.(2) 程序很难继承新的网络服务.如果程序中有很多地方依赖于网络协议与网络软件的话,那么这种程序就很难进行编写与维护,同时也很难移植到其他的操作系统环境中去.为了解决应用程序对网络过分依赖的问题,一种有效的编程方法就是在客户机与服务器之间增加一层软件.这就是通常所说的中间件。2.1 客户机/服务器模型介绍企业网上寻呼系统是一个典型的客户机/服务器系统.2.1.1 客户机/服务器模型概述 在Client/Server4计算模式中,一个或多个客户机与一个或多个服务器,以及支持客户机、服务器进程通信的网络操作系统共同组成了一个分布式计算、分布式处理的系统.在Client/Server计算模式中,应用可以分为以下两部分:(1)前端的客户机部分(2)后端的服务器部分客户机提出服务要求,网络将用户请求传送到服务器;服务器执行用户请求,完成所要求的操作并将结果回送用户.2.1.2 客户机/服务器中的中间件中间件的基本概念Client/Server12模式与传统的资源共享模式相比,具有以下几个优点:网络通信量减少,响应时间短,网络能为用户提供更好的服务质量;通过将一个应用程序分别运行在网络互联的服务器与客户机上,可以充分发挥客户机与+服务器双方的功能,组成一个有效的分布式应用环境;通过将应用程序与它们所处理的数据隔离,可以使数据具有很好的独立性,可以方便的开发新的应用.将数据存放在服务器中,服务器可以对数据放在服务器中,服务器可以对数据访问实现有效的管理与控制,未授权用户无法对数据进行非法访问,系统数据的完整性得到了很好的保护;由于客户机有自己的管理用户界面,因此每个服务器可以支持更多的用户.尽管Client/Server模式有很多优点,但是对于大多数从事应用程序开发的程序员来说,编写跨平台、多协议、多编程语言的网络应用软件仍然是一件相当困难的工作.同时,如果程序员需要针对底层网络协议来编写应用程序的话,也会带来以下这两个明显的问题;(3) 程序过多地依赖底层网络技术.(4) 程序很难继承新的网络服务. 如果程序中有很多地方依赖于网络协议与网络软件的话,那么这种程序就很难进行编写与维护,同时也很难移植到其他的操作系统环境中去.为了解决应用程序对网络过分依赖的问题,一种有效的编程方法就是在客户机与服务器之间增加一层软件.这就是通常所说的中间件 Closesocket()Closesocket()Socket()Bind()Listen()Accept()阻塞,等待客户数据Recv()处理服务请求Send()Socket()Connect()Send()Recv()建立连接请求数据应答数据客户机服务器图2-1 面向连接套接字应用程序时序图闭套接字. 无连接通信一般都是面向事务处理的,一个请求一个应答就完成了客户程序与服务程序之间的相互作用.若使用无连接的套接字编程8,程序的流程可以用图2-2表示:2.2.2 WinSock规范在Windows系统中进行编程时,总是需要使用很多系统提供的应用程序接口来调用系统功能,或者与系统进行交互,在Windows系统中包括了专门针对网络编程的接口WinSock API. WinSock API在Windows系统中为网络开发提供了一个协议无关(Protocol Independent)的接口,该接服务器Socket()Bind()Recvfrom()Socket()客户机Bind()阻塞、等待客户数据处理服务请求Sendto()Sendto()Recvfrom()Close()Close()服务请求服务应答 图2-2 无连接套接字应用程序时序图口包含了一组网络I/O和获取网络信息的库函数,网络应用程序通过调用这部分函数实现自己的功能.WinSock库函数都包含在WinSock.dll这个动态链接库中,这个动态链接库在系统中作为网络应用程序与TCP/IP协议的中间连接的桥梁.它们之间关系如图2-3所示:网络应用程序A网络应用程序B网络应用程序CWinSock.dllTCP/IP协议栈底层网络协议图2-3 应用程序与WinSock套接字2.2.3 WinSock控件 WinSock控件是Visual Basic的外部控件,利用WinSock控件可以方便实现Windows Sockets编程.WinSock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信.即使对TCP/IP不太熟悉的用户,使用该控件也可以方便地创建简单的客户机/服务器程序.下面对WinSock控件的事件、方法、属性按其在程序中出现的顺序分别介绍. 服务器程序的实现过程 服务器程序必须设置好LocalPort属性,作为监听端口,该值为一个整数(只要是一个其他TCP/IP应用程序没有使用过的值即可. 使用Listen方法进入监听状态,等待客户机程序的连接请求. 客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件得到一个参数RequestID. 服务器程序用Accept方法接收客户机程序的RequestID请求.这样,服务器程序就可以用SendData方法发送数据了.Accept方法必须用上一步得到的RequestID作为其参数. 当服务器程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数.在该事件中,可以用GetData方法接收数据. 如果接收到Close事件,则用Close方法关闭TCP/IP连接. 客户机程序的实现过程 客户程序设置RemostHost属性,以便指定运行服务器程序的主机名,该字符串可在“控制面板|网络|标识|计算机名”中查到. 设置RemotePort属性,以便指定服务器程序的监听端口. 使用Connect方法,向服务器提出连接请求. 服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了. 当客户机程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数.在该事件中,可以用GetData方法接收数据.WinSock控件还有两个重要的属性,即Protocol和State.Protocol设定使用的协议是TCP还是UDP:取值sckTCPProtocol表示TCP ,取值sckUDPProtocol表示UDP.因为WinSock控件的默认设置是sckTCPProtocol,所以程序中并没有使用Protocol属性.State属性反映的是当前TCP/IP的连接状态7.3、需求分析通过对企业终端用户调研,网上寻呼系统的需求已经被较为完整地了解.3.1 理解需求 实现聊天功能,包括消息的发送和接收.用户进行消息发送时,应能够明确消息接受者;消息接收时,应能够明确消息发送者.应该能够及时收发,用户已经发送的消息,应迅速转达接收者. 新用户可以进行注册,没有注册过的用户只有经过注册才能进入系统,系统可以对注册后的用户进行管理. 已经注册的用户可以通过登录来进入程序,系统可以监控每位用户的状态,但为了不涉及隐私,应该不能查看聊天的内容. 用户应该能够添加和删除好友,对好友应该能够方便地进行聊天.用户还应该能够添加和删除不友好的用户,把不友好的用户建成黑名单,列入黑名单的用户发送的消息,用户不能收到. 当好友不在线时,用户也应该能够给其发送消息.系统应该具有暂存信息的功能,如果消息接收者不在线,系统应该暂存数据,直到消息接收者登录后再转发给他. 系统应该提供数据库维护功能. 系统运行在Windows平台上,应该有一个较好的图形用户界面.将机械自动化应用到社会生产中,可提高产品的质量和产品生产率,缩短产品的生产周期,同时可降低产品的生产成本,减轻工人的劳动强度,提高企业的经济效益。机械自动化在改善劳动环境、促进产品的更新进度、带动产品相关技术的发展也有一定效果。 系统应该有很好的可扩展性.3.2 需求分析本系统的开发宗旨是实现企业局域网内员工之间方便的信息交流功能,实现企业员工之间信息交流更加省时、方便、充分,提高企业的办公效率.根据系统实现的目的,可以描述出网上寻呼系统的功能,即定义用例.根据与企业信息网络管理员和用户的讨论,网上寻呼系统的用例包括:用户管理、消息发送、消息接收、聊伴管理.其中,用户管理用例包括用户的注册和登录.消息发送用例包括消息的即时发送和不在线用户的消息暂存.聊伴管理用例包括好友的添加、删除和黑名单用户的添加、删除.4、系统设计根据需求分析状况,本系统应采用客户端服务器系统.因为采用点对点系统,总体构架复杂,不便于系统的管理.而客户端服务器系统便于系统管理,将一个应用程序分别运行在网络互联的服务器与客户机上,可以充分发挥客户机与服务器双方的功能,组成一个有效的分布式应用环境.发送消息的客户机与处理数据的服务器隔离,可以使数据具有很好的独立性,将数据存放在服务器中,服务器可以对数据访问实现有效地管理与控制,未授权用户无法对数据进行非法访问,系统数据的完整性得到了很好的保护.本系统开发环境选择Visual Basic开发平台,并通过ADO技术3调用Access数据库.因为本系统技术难度不大,应该把主要精力放在系统的实现上,而不是平台的挑选上,系统没有较为复杂的算法和耗时的操作,所以选用Visual Basic开发环境.服务器数据库中存储的是用户信息和不在线用户消息的暂存,对于一般企业来说,用Access数据库已经足够,不必使用高成本的SQL Server等大中型数据库.4.1 功能分析4.1.1 客户端功能 在主界面中通过菜单调用新消息处理界面. 在主界面中通过菜单调用历史消息处理界面. 消息中可以包含图标和文本. 给在线用户发送即时消息. 给不在线用户发送暂存消息. 用ADO控件读写包含rtf文档的数据库. 在状态栏中显示图标. 通过状态栏图标可以调用菜单,并且以动画形式醒目地提示用户收到新消息. 可以设置消息文本的颜色和字体. 屏蔽黑名单的消息.4.1.2 服务器端功能 主界面中显示所有用户的注册消息. 主界面中显示所有用户的在线状态. 显示不在线用户留言消息. 可以修改用户的注册信息. 可以修改用户的留言信息.4.2 模块设计整个项目分成两部分:客户端和服务器端.由于是不同的两个应用,应该分别属于不同的两个工程.工程中包括Form窗体和Module模块.服务器只有一个窗体,完成服务器的通信机制,显示服务器的主界面.客户端可分为个Module模块和个Form窗体. 主模块:定义公用参数,启动窗体. 文件读取模块:从配置文件中读取消息到内存,把内存存储到配置文件中. 状态栏操作模块:状态栏添加、删除、改变图标等. 服务器查找模块:得到服务器地址. 主窗体:完成通信机制,显示主界面. 登录注册窗体:完成用户登录,没有注册的用户完成注册. 消息发送窗体:完成消息的编辑与发送. 最新消息窗体:接收显示最新消息. 历史消息窗体:查询历史消息.5、数据库设计企业网上寻呼系统需要数据库的支持,在服务器端要存储用户的注册信息,以及暂存给不在线用户的留言,在客户端要存储接收到的信息和历史信息.根据分析结果,系统需要设计两个Access数据库,分别存储服务器端和客户端的数据.另外还需要为客户端设计一个ini文件2,文件保存在客户端应用程序路径下面,用来记录好友名单和黑名单.5.1 服务器数据库服务器数据库分为两个实体,一个数据库记录用户的注册信息,一个数据库记录不在线用户的留言.用户的注册信息包括用户号码、昵称、密码、电子邮件等,不在线用户的留言包括发消息用户号码、接收消息用户号码、消息和时间等.根据以上分析,首先在Access中创建数据库11 Users.mdb,接着建立UserInfo表来记录用户信息,Messages来记录留言消息,具体如下面表5-1和表5-2所示:5.2 客户端数据库 客户端数据库也有两个实体,两个实体分别存放在两个表里面,记录接收消息用户号码、发送消息用户号码、消息内容、发送时间.首先利用Access创建数据库Data.mdb,接着建立表NewMsg和OldMsg,两表都是存储消息,所以表的结构和服务器消息Messages消息表相同,这里不再赘述.表5-1 UserInfo用户信息表列名数据类型可否为空说明UserID数字否用户号码Password文本可用户密码NickName文本可用户昵称Mail文本可电子邮件Status数字可是否在线UserFace数字可用户头像表5-2 Messages消息表列名数据类型可否为空说明ReceivedID数字否接收消息用户号码SentID数字否发送消息用户号码 Content备注可消息内容 Time时间否发送时间5.3 客户端User.ini结构User.ini文件仅仅用于客户端记录联系人的消息,该文本文件的格式如下.1001_FriendsCount=31001_Friends_Item0UserID=1003UserFace=2UserNickName=44UserMail=无1001_Friends_Item1UserID=1002UserFace=5UserNickName=33UserMail=无1002_BadboysCount=11002_Badboys_Item0UserID=1000UserFace=1UserNickName=11UserMail=无该文件中存储了用户的好友和黑名单,当客户端运行时,系统将从该文件中读取数据,加载到程序中,用户添加或删除好友及黑名单中的联系人时,系统就在该文件中添加或删除信息.6、通信模块设计 本系统为客户机/服务器系统,客户机与服务器的通信Visual Basic 提供了WinSock控件,利用WinSock控件,可以方便地实现系统通信.6.1 通信格式 由于客户机/服务器系统通信内容很多,包括用户注册、用户登录、用户查询留言、用户发送消息、用户接收消息,这些内容的性质不同,性质不同的消息要进行不同的处理,为了区分这些不同的消息,较好地完成通信功能,需要对程序通信信息加上识别码,以区分不同消息的性质.无论是客户机或服务器,都可以通过识别码进行通信,发送端在发送信息的前面加上识别码,接受端收到信息后,首先得到识别码,然后在依照识别码对其进行相应处理. 每帧信息的总体格式9如下所示.识别码:内容1 内容2 内容36.2 通信过程 系统依靠WinSock控件进行通信.当任一客户端发送消息时,服务器的WinSock控件就形成了DataArrival事件,在该事件中,调用WinSock控件的GetData方法就能够得到客户端发送的消息,程序通过Select Case 语句完成识别码的查询,从而区别不同的消息,实现系统的通信.服务器向客户端发送消息也是类似的过程.代码形式如下.Private Sub wskServer_DataArrival(ByVal bytesTotal As Long) wskServer(Index).GetData strReceivedSelect Case intCommandID申请一个新用户命令号:AddNewUser1内容:“用户昵称;用户密码;用户电子邮箱地址”Case AddNewUser1:取指定用户的信息命令号:UserInfo1内容:“用户ID”Case UserInfo1:申请添加一名好友命令号:“AddNewFriend1”内容:“客户ID;好友ID”Case AddNewFriend1:登录服务器命令号:Login1内容:用户ID;用户密码Case Login1:申请添加一名黑名单命令号:“Addbadboy1内容:客户ID;黑名单ID;Case AddBadboy1:从服务器获得留言命令号:GetMsg1内容:“Case GetMsg1:发送消息给指定用户的申请命令号:ToServer1内容:用户ID=消息内容Case ToServer1:End select End sub7、服务器端设计 根据系统模块设计,服务器端主要的任务是用户信息、留言信息的显示,以及对客户端发送的不同消息进行处理,如客户端用户登录、注册、发送消息、接收消息、添加好友、添加黑名单等,对这些不同的消息,服务器应进行不同的处理.7.1 界面设计服务器主界面有两个Frame控件、两个DataGrid控件、两个Adodc控件、一个RichTextBox控件、一个WinSock控件、一个Timer控件组成,如图7-1所示,这些控件属性如表7-1所示:7.2 部分代码实现1. 首先进行服务器的初始化,首先得到程序当前地址,接着进行数据库连接,初始化adoMsg控件使其指向数据库Users的表Messages,初始化图7-1 服务器程序主界面adoUsers控件使其指向数据库Users的表UserInfo.部分代码如下.Private Sub Form_Load()/使adoMsg指向Messages表adoMsg.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0; & Persist Security Info=False; & Data Source= & strPath & Users.mdbadoMsg.CommandType = adCmdTableadoMsg.RecordSource = MessagesadoMsg.Refresh/使adoUsers指向UserInfo表adoUsers.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0; & Persist Security Info=False; & Data Source= & strPath & Users.mdb表7-1 服务器主要控件属性控件属性属性取值frmServer(Form)NamefrmServerCaptionServerwskServerNamewskServerdgdMsgNamedgdMsgDataSourceadoMsgrtfMsgNamertfMsgDataSourceadoMsgDateFieldContentdgdUsersNamedgdUsersDataSourceadoUsersadoUsersNameadoUsersCaption用户列表adoMsgNameadoMsgCaption留言信息adoUsers.CommandType = adCmdTableadoUsers.RecordSource = UsersInfoadoUsers.RefreshwskServer(0).LocalPort = 50400 /初始化wskServer控件wskServer(0).ListenLindCount = 0End Sub2. 当客户端请求连接时,服务器做出反应,往wskServer控件数组里增加一个控件,以对该请求作出反应.Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)LinkCount = LinkCount + 1Load wskServer(LinkCount)wskServer(LinkCount).LocalPort = 0wskServer(LinkCount).Accept requestIDEnd Sub3. 当客户端中断与服务器连接时,服务器首先把数据库中在线状态属性Status改为0,然后卸载与该客户端联系的wskServer控件数组中那一项.Private Sub wskServer_Close() If wskServer(Index).Tag Then adoUsers.Recordset.MoveFirst adoUsers.Recordset.Find UserID= & wskServer(Index).Tag adoUsers.Recordset.Fields(Status).Value = 0 End IfUnload wskServer(Index)End Sub 4. 在窗体标题中显示在线用户数目.Private Sub Timer1_Timer()Me.Caption = 在线用户数目: & CStr(wskServer.Count - 1)End Sub5. 当客户端向服务器发送消息时,就会引起服务器的DataArrival事件.这个事件过程代码就是对该事件的响应,首先在事件中通过GetData方法得到客户端所传送过来的字符串,并且把该字符串中的标识符与消息内容分开.部分代码如下.Private Sub wskServer_DataArrival(ByVal bytesTotal As Long)wskServer(Index).GetData strReceivedSelect Case intCommandIDCase AddNewUser1:Dim strNickName As String intPos = InStr(1, strCommandContent, :, vbBinaryCompare) strNickName = Left(strCommandContent, intPos - 1) strCommandContent = Mid(strCommandContent, intPos + 1) adoUsers.Recordset.MoveLast adoUsers.Recordset.MoveFirst intUserID = 1000 + adoUsers.Recordset.RecordCount adoUsers.Recordset.AddNew adoUsers.Recordset.Fields(UserID).Value = intUserID adoUsers.Recordset.Save adoUsers.Recordset.Update wskServer(Index).SendData AddNewUser2; & CStr(intUserID)Case AddNewFriend1: /代码同“AddNewUser1”类似,这里不再赘述. Case Login1: intPos = InStr(1, strCommandContent, :, vbBinaryCompare) strUserID = Left(strCommandContent, intPos - 1) strCommandContent = Mid(strCommandContent, intPos + 1) adoUsers.Recordset.MoveFirst adoUsers.Recordset.Find UserID = & strUserID If adoUsers.Recordset.EOF Then wskServer(Index).SendData Login3:该用户不存在! Else If adoUsers.Recordset.Fields(Password).Value = strCommandContent If adoUsers.Recordset.Fields(Status).Value = 0 Then wskServer(Index).SendData Login2; & strUserID & = & adoUsers.Recordset.Fields(NickName).Value & : & adoUsers.Recordset.Fields(Mail).Value & : & CStr(adoUsers.Recordset.Fields(UserFace).Value) adoUsers.Recordset.Fields(Status).Value = 1 wskServer(Index).Tag = strUserID Else wskServer(Index).SendData Login3: 该用户已经登录! End If Else wskServer(Index).SendData Login3: 密码不正确! End If End IfCase AddBadboy1: /代码同“AddNewUser1”类似,这里不再赘述.Case GetMsg1: strUserID = wskServer(Index).Tag If adoMsg.Recordset.EOF And adoMsg.Recordset.BOF Then Exit Sub End If adoMsg.Recordset.MoveFirst adoMsg.Recordset.Find ReceivedID= & strUserID strCommandContent = Do While Not adoMsg.Recordset.EOF strCommandContent = strCommandContent & adoMsg.Recordset.Fields(SentID).Value & 1 & adoMsg.Recordset.Fields(Time).Value & 2 & adoMsg.Recordset.Fields(Content).Value & 3 mark = adoMsg.Recordset.Bookmark adoMsg.Recordset.Find ReceivedID = & strUserID,1,adSearchForward,mark Loop wskServer(Index).SendData ToUser: & strCommandContent adoMsg.Recordset.MoveFirst adoMsg.Recordset.Find ReceivedID= & strUserID Do While Not adoMsg.Recordset.EOF adoMsg.Recordset.Delete adoMsg.Recordset.MoveFirst adoMsg.Recordset.Find ReceivedID= & strUserID LoopCase ToServer1: intPos = InStr(1, strCommandContent, =, vbBinaryCompare) strUserID = Left(strCommandContent, intPos - 1) strCommandContent = Mid(strCommandContent, intPos + 1) adoUsers.Recordset.MoveFirst adoUsers.Recordset.Find UserID = & strUserID If adoUsers.Recordset.EOF Then wskServer(Index).SendData ToServer2; & strUserID & ;没有该用户! Else If adoUsers.Recordset.Fields(Status).Value = 1 Then wskServer(GetSocketIndexFromUserID(strUserID).SendData ToUser; & wskServer(Index).Tag & 1 & CStr(Now) & 2 & strCommandContent & 3 Else adoMsg.Recordset.AddNew adoMsg.Recordset.Fields(ReceivedID).Value = strUserID adoMsg.Recordset.Update wskServer(GetSocketIndexFromUserID(wskServer(Index).Tag).SendData ToServer3; & strUserID & ;该用户不在线,消息已存在服务器, + 该用户登录到服务器后会自动发送 End If End IfEnd SelectEnd Sub6. 当服务器停止运行时,就会与客户端切断连接.代码略.8、客户端设计 根据系统设计,客户端主要包括4个Module模块和5个Form窗体,下面分别介绍这些模块.8.1 模块设计8.1.1 主模块MainModule 主模块的主要作用是定义全局变量,如系统路径、用户信息、服务器地址等,另外就是启动系统登录窗口,主要代码如下./Sub Main为软件的启动过程Sub Main() If Right(App.Path, 1) = Then strPath = App.Path Else strPath = App.Path + End If fileName = strPath + Users.ini ServerIP = GetIPAddress() intFriend = 0 intBadboy = 0 blnLogined = False frmLogin.ShowEnd Sub8.1.2 服务器IP查找模块由于局域网中服务器程序可能安装在不同的机器上,所以客户端程序自动得到服务器地址非常必要.在该模块中系统进行了许多Windows API函数调用,首先简要介绍这些系统API函数.1. int gethostna

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论