企业内部信息交流平台(服务器端) 本科毕业论文.doc

上传人:小小飞 文档编号:3908720 上传时间:2019-10-10 格式:DOC 页数:25 大小:2MB
返回 下载 相关 举报
企业内部信息交流平台(服务器端) 本科毕业论文.doc_第1页
第1页 / 共25页
企业内部信息交流平台(服务器端) 本科毕业论文.doc_第2页
第2页 / 共25页
企业内部信息交流平台(服务器端) 本科毕业论文.doc_第3页
第3页 / 共25页
企业内部信息交流平台(服务器端) 本科毕业论文.doc_第4页
第4页 / 共25页
企业内部信息交流平台(服务器端) 本科毕业论文.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《企业内部信息交流平台(服务器端) 本科毕业论文.doc》由会员分享,可在线阅读,更多相关《企业内部信息交流平台(服务器端) 本科毕业论文.doc(25页珍藏版)》请在三一文库上搜索。

1、企业内部信息交流平台(服务器端)目 录企业内部信息交流平台(服务器端)1引言11 绪论11.1 系统研发的目的和意义11.2 问题定义11.3 可行性研究11.4 需求分析21.4.1 用户需求21.4.2 服务器端功能需求22 系统设计22.1 数据库设计22.1.1 数据库及表关系22.1.2 建库、表的规则32.2 系统架构32.3 功能模块的设计42.4 界面操作流程设计62.4.1 启动服务业务流程62.4.2 停止服务业务流程62.4.3 查看服务器配置62.4.4 公司信息维护业务流程72.4.5 部门信息维护业务流程72.4.6 用户信息维护业务流程73 系统功能实现83.1

2、数据实体类的实现83.2 业务逻辑类功能介绍93.3 服务器端程序界面93.3.1 主窗体93.3.2 实现ServerListenThread113.3.3 实现ServerReceiveThread类154 系统测试194.1 说明194.2测试环境配置194.3 测试用例194.3.1 侦听客户端测试用例194.3.2 维护公司信息测试用例194.3.3 维护部门信息测试用例204.3.4 维护用户信息测试用例204.3.5 添加维护用户信息测试用例205 运行与维护206 总结与展望20参考文献21致 谢22附录23外文页24II企业内部信息交流平台(服务器端)摘 要 强大的网络资源给

3、人们的生活带来了质的飞跃。对于现代人来说,哪一天突然没有了网络,生活将无法想象。而对于不同的社会群体对网络资源的需求又有所不同。在企业或公司内部,员工之间的沟通与交流是很重要的。为了有效利用内网资源、提高员工的工作效率以及保证企业或公司内部信息安全。拥有一款即时通讯工具是很必要的,而企业内部信息交流平台的开发正是为了满足这一需求。它的开发采用了C/S架构。主要涉及的技术有Socket(套接字)、Thread(线程)、JDBC(数据库访问)。其开发过程体现了面向对象的思想。正文部分由需求分析、系统设计、系统实现、系统测试和运行与维护五部分组成。其中重点且详细阐述了服务器端的核心内容:启动和停止服

4、务器(Socket技术);侦听线程(ServerListenThread)和消息接收线程(ServerReceiveThread)。关键字 Socket 线程 JDBC(数据库访问) 面向对象引言开发仅限于公司内部使用的即时通讯工具,不仅能满足员工之间的沟通与交流,而且还能有效利用内网资源,保证内部信息安全。基于企业内部信息交流平台的自身特点和安全性的考虑,采用面向对象的编程语言来开发。面向对象编程的思想核心是继承、封装和多态。通过这些特性来组织解决复杂的程序。C+是面向对象的编程语言,它包含了C语言的所有特性、属性和优点。但该平台是一个网络应用程序。要求较好的可移植性。而Java正是适应了这

5、一要求。它是一种很好的编程语言,简单易用。除了具有面向对象程序设计的优点和可移植性外,同时还具备稳健性和安全性。面向对象简单的类机制和动态灵活的接口模型,使得开发工作完全集中于对象本身和接口的设计13。企业内部信息交流平台在设计和开发过程中,不仅仅局限于基本功能的实现。它最大的特点就是使用NetBeans IDE集成开发工具,该工具是针对Java语言的图形化的界面开发工具。提供了功能强大的Swing等多种组建。方便了应用程序的开发。通过创建包,使用包的管理机制,对各个功能模块划分使具有相同功能的文件放在同一包下,显得结构清晰。并且在编码过程中看起来繁琐,但通过导入包,使得包与包之间的文件可以相

6、互访问,体现了代码的可充用性。它优化的结构体现了程序的简单、容易修改并且可扩充性好,同时也充分体现了面向对象的编程思想。本文按照系统分析、设计、实现以及测试与维护划分章节。重点在于详细介绍系统实现部分中服务器端的服务器启动与停止、客户端与服务器端的通信(即对客户端的侦听线程和接收转发消息线程)。其它部分也做了简单介绍。1 绪论1.1 系统研发的目的和意义设计开发企业内部信息交流平台目的为:一是充分利用内部网络资源,保证企业内部信息的安全性;二是便于对员工的管理,促进员工之间的交流,提高工作效率。1.2 问题定义企业内部信息交流平台服务器端主要实现的功能为服务器的启动和停止(涉及服务器端侦听线程

7、和消息接收或转发线程);公司、部门和用户信息的维护。主要涉及技术为Socket套接字、Thread线程和JDBC数据库访问。对于整个系统来说,实现客户端与服务器端的通信是关键。所以前一部分便成为服务器端的重点核心内容。1.3 可行性研究 聊天的工具很多,但是并不都具有针对性。而且与外网聊天的工具不仅会影响到员工工作效率,而且企业内部信息的安全性也受到威胁。本软件采用Java语言编写具有很好的跨平台性和可移植性。它提供友好的界面,结合了数据库技术。安装方便,针对性强,有利于企业管理。本软件一定能得到广大客户的欢迎。作者在具备了开发环境的基础上,能够熟练应用JAVA语言进行编码实现。1.4 需求分

8、析1.4.1 用户需求开发一款企业内部使用的即时通信工具,对该工具的要求是:为了加强对用户的管理,不向用户提供在线注册功能,只提供个人信息的更新功能;公司信息、部门信息、用户注册信息由管理员统一维护;管理员可以查看在线用户的信息;用户可以保存聊天记录;设计成仿“QQ”界面;该工具只提供聊天功能。1.4.2 服务器端功能需求启动服务启动服务Server_StartUp自动设置服务器端套接字,启动服务后监听客户端的请求,同时显示连接状态和接收请求的信息。停止服务停止服务Server_Stop向客户端发送消息,关闭服务器端的套接字,断开与客户端的连接,显示服务器状态。查看服务器配置信息查看服务器配置

9、信息Server_Configuration显示服务器端的IP地址和端口号查看在线人员详细信息查看在线人员详细信息Server_Oline显示当前在线人员的详细信息公司基本信息维护更新公司基本信息Server_UpdCorpInfo向服务器发送更新公司信息的请求,更新公司的基本信息部门信息维护增加部门信息Server_AddDeptInfo填写新增部门信息,向服务器发送增加部门信息的请求,增加一个新部门删除部门信息Server_DelDeptInfo向服务器发送删除部门信息的请求,删除部门的基本信息更新部门信息Server_UptDeptInfo向服务器发送更改部门信息的请求,更改部门的基本信

10、息增加用户的基本信息Server_AddUserBasInfo填写新用户信息,向服务器发送增加用户信息的请求,增加一个新用户用户基本信息维护删除用户的基本信息Server_DelUserBaseInfo向服务器发送删除用户信息的请求,删除用户的基本信息更新用户的基本信息Server_UpdUserBaseInfo向服务器发送更改用户信息的请求,更改用户的基本信息初始化用户的密码Server_InitUserPwd向服务器发送更改用户信息的请求,将用户的密码作初始化处理2 系统设计2.1 数据库设计企业内部信息交流平台软件的后台数据库采用Microsoft SQL Server 2000 Ent

11、erprise Edition 数据库管理系统建立并维护。数据库设计过程中使用SQL Server的查询分析器创建了数据库脚本文件corperation_msg.sql。其中SQL Server的登录模式为混和身份验证,超级用户的用户名及密码均为sa,SQL Server服务器的端口号:1433。2.1.1 数据库及表关系“企业内部信息交流平台”数据库名称:cm_Master涉及的表包含 t_UserInfo:用户信息表; t_Corp:公司信息表; t_Dept:部门信息表。见表关系图1-1。图2-1表关系图2.1.2 建库、表的规则数据库名称以小写英文单词命名。表命名:t_表义名,其中表名

12、要使用有意义的英文单词表示,且单词的首字母大写。字段名称以大写英文单词命名。为每个表创建相关约束,主要包括主键约束、外键约束、默认值约束、检查约束等。2.1.3 表设计以下是数据库中的各个表结构:t_UserInfo(用户信息表)列名数据类型(精度范围)空/非空约束条件USERACCOUNTVARCHAR(20)非空PKDEPTIDINT空FK 参照t_Dept表(DEPTID)USERNAMEVARCHAR(20)非空DEFAULT: 您的姓名NICKNAMEVARCHAR(20)非空DEFAULT: 您的昵称PWDVARBINARY(46)非空DEFAULT: 111111SEXBIT非空

13、DEFAULT: 0代表男PHONEVARCHAR(15)空EMAILVARCHAR(30)空REGIONVARCHAR(10)空MYINFOVARCHAR(50)空OLINEIPVARCHAR(15)空HEADPICVARCHAR(20)非空DEFAULT: default.gif补充说明由于PWD字段的值存入之前要用pwdencrypt函数做加密处理t_Corp(公司表)表名列名数据类型(精度范围)空/非空约束条件CORPNAMEVARCHAR(50)非空CORPADDRVARCHAR(50)非空CORPDOMAINVARCHAR(20)CORPEMAILVARCHAR(30)CORPPH

14、ONEVARCHAR(15)CORPFAXVARCHAR(15)补充说明t_Dept(部门表)列名数据类型(精度范围)空/非空约束条件DEPTIDINT非空PK、标识列、IDENTITY(1,1)DEPTNAMEVARCHAR(30)非空DEPTDESCRVARCHAR(100)补充说明2.2 系统架构 “企业内部信息交流平台”软件采用基于C/S模式的三层架构体系。三层架构包括:客户层、服务层、数据层。图2-2系统架构图客户层是应用程序的用户接口部分。担负着用户和服务器间的对话功能。它用于检查用户的输入数据(比如验证用户输入的日期格式),但不包括有关业务本身的处理逻辑(比如用户身份的验证)。客

15、户层也负责显示应用程序处理过的数据。服务层主要充当“客户层”和“数据层”的桥梁,它从“客户层”接收命令请求,然后根据命令的类别执行相应的处理:比如从数据库中查询数据、为客户层转发聊天消息等等。数据层主要由数据库管理系统来充当,该平台采用Microsoft公司的SQL Server 2000作为数据管理工具。因此,从服务层传送到数据层的“命令”一般都是通过SQL语言来实现的。2.3 功能模块的设计服务器端的各个包的划分,见表2-1。表2-1包的划分包名说明Base数据实体包Baseform用户界面包Commonform自定义界面包Bl业务实体包Utils工具类包Properties资源文件包Im

16、g图像资源包通过划分模块,将具有相同功能的JAVA类文件,封装在包中,当需要用到某个类函数时,通过导包后直接使用。这样不仅使用方便,而且框架结构清晰。1 BaseForm(用户界面包)见图2-3服务器端表示层:图2-3服务器端表示层上图是在baseform包要建立的各个用户界面。它们都继承了JFrame类。SeverReceiveTread类和ServerListenThread类继承了Tread类。2 Base包是数据实体包,它包含各个类文件中的公司信息(Corperation)、部门信息(Department)、用户信息(UserInfo)和在线用户信息(OnlineUser)的基本数据,

17、通过set、get方法给数据赋值和获取数据值。3 BL包是业务实体类包,它包括:CorperationBL、DepartmentBL、UserInfoBL 和DepartUserBL。其中CorperationBL、DepartmentBL、UserInfoBL类继承了Utils工具包中的DbUtils类,通过它来建立与数据之间的联系,访问数据库中的数据。4 Utils 包是工具包,它包括:DbUtils类、PropConfig类、CommonUtils类和ConstantValues类。 其中DbUtil类是为业务实体类建立了与数据库的连接;PropConfig类将工程中的资源文件读取后存入

18、到Properties类包的实例中,本类中包含4个Properties类的资源实例:dbconfigProp数据库配置资源实例、socketProp套接字配置资源实例、messageProp 消息资源实例和sqlPropT-SQL资源实例。通过类名.方法名()访问消息资源实例;CommonUtils类是共通函数类,它主要完成获取当前屏幕宽度和高度、设置组件的启动位置、关闭输入输出文件流、向文件中添加内容、从文件中读取数据、生成新的文件、获取本地系统时间以及获取服务器IP地址和端口号。ConstantValues类存储常用的常量信息,常量信息以公有静态属性值存储,通过类.属性名直接调用以下常量的

19、值。5 Img 包中存放图片;Properties包中包含键值的文件。 Commonform包存放了用户自定义的用户界面。2.4 界面操作流程设计2.4.1 启动服务业务流程启动服务侦听客户端处理请求内容结束接受请求图2-4 启动服务2.4.2 停止服务业务流程停止服务向客户端发送信息断开与服务端连接结束图 2-5 停止服务2.4.3 查看服务器配置实现:显示服务器端的IP地址和端口号。2.4.4 公司信息维护业务流程更新公司信息返回失败消息返回成功消息结束更新数据成功失败图 2-6公司信息更新2.4.5 部门信息维护业务流程增加部门信息更新部门信息删除部门信息返回成功信息返回失败消息结束处理

20、变更请求发送部门信息变更请求失败成功图 2-7部门信息维护2.4.6 用户信息维护业务流程增加用户信息更新用户信息返回成功消息密码初始化删除用户信息返回失败消息结束处理变更请求发送用户信息变更请求失败成功图2-8用户信息维护3 系统功能实现图3-1服务器端状态图3.1 数据实体类的实现数据实体类的实现主要是用set和get方法设置和获取数据实体的属性值。下面是各个实体类属性和成员方法。Corperation(公司信息)数据实体类,如下图3-2。图3-2 Corperation类图其它三个实体类分别是Department(部门信息)数据实体类、OnlineUser(在线用户信息)数据实体类、Us

21、erInfo(用户信息)数据实体类。3.2 业务逻辑类功能介绍业务逻辑类主要是处理与数据实体信息相关的逻辑。比如公司业务逻辑类:CorperationBL类主要用来处理和公司信息相关的业务逻辑,其中getCorperation()为公有方法用于取得公司的基本信息、updateCorperation()为公有方法用于更新公司的基本信息。3.3 服务器端程序界面主要阐述主窗体的服务启动与关闭。3.3.1 主窗体图 3-3“启动服务器”界面3.3.1.1 主窗体的功能介绍服务器端的主窗体包含服务器端程序的核心功能,服务器管理员可以通过该窗体执行下面的操作:启动服务器、关闭服务器、查看服务器配置信息。

22、作者在主窗体上设置菜单栏,把“公司信息维护”、“部门信息维护”、“用户信息维护”等功能项集中放置在“信息维护”菜单中,把“启动服务器”、“停止服务器”、“查看服务器配置信息”等功能项放置在“系统管理”菜单中。除此之外,为方便用户操作,我们将“启动服务器”、“停止服务器”、“查看服务器配置信息”和“用户信息维护”这四个常用功能项放置在工具栏中。3.3.1.2 控件及主菜单实现本窗体界面上包含的控件种类包括:JPanel(作JToolBar和JTextArea的容器)、JToolBar、JScrollPane(JTextArea的容器)、JTextArea、JMenuBar、JMenu、JMenu

23、Item、JSeperator。其中JMenuItem的界面设计见图3-4。图3-4 主菜单3.3.1.3 功能代码实现图3-3是服务器端程序的启动界面。当服务器端程序打开的时候,服务就已经启动了,这时不仅要向用户提示相应的信息,而且还要禁用工具栏上“启动服务”的按钮和系统管理(I)菜单下的“启动服务器(S)”菜单项。MainJFrame中声明了三个实例变量,它们是服务器端侦听套接字serverSocket,其作用是建立服务器端套接字;在线用户集合onlineUsersVector,作用是保存所有在线用户类的实例;服务器端侦听线程类listenThread,它负责侦听客户端的登录请求。下面是s

24、tartServer函数的实现过程:#001 private void startServer () #002 StringBuffer msgStrBuf = null; #003 /取得消息资源配置实例和网络资源配置实例#004 ResourceBundle msg_config = PropConfig.getMsg_resource ();#005 ResourceBundle socket_config =PropConfig.getSocket_resource ();#006 try #007 serverSocket = #008 new ServerSocket (#009

25、Integer.parseInt (socket_config.getString (port);#010 /初始化界面组件状态#011 initComponentsState (false,#012 msg_config.getString(server.state.start);#013 msgStrBuf = new StringBuffer ();#014 /准备日志信息 #015 msgStrBuf.append (服务器准备启动 );#016 /取得IP信息#017 msgStrBuf.append ( IP地址: );#018 msgStrBuf.append (CommonUt

26、ils.getServerIP (serverSocket);#019 /取得端口号信息#020 msgStrBuf.append ( 端口号: ); #021 msgStrBuf.append (CommonUtils.getServerPort (serverSocket);#022 msgStrBuf.append (n);#023 /取得服务器当前时间#024 msgStrBuf.append (CommonUtils.getCurrentTime ();#025 msgStrBuf.append ( );#026 /取得服务器启动成功的消息#027 msgStrBuf.append

27、(#028 msg_config.getString (msg.serverstart.success);#029 msgStrBuf.append (n);#030 /准备日志信息 #031 /显示启动信息 #032 logoinfoJTxtArea.append (msgStrBuf.toString ();#033 /准备在线用户集合#034 onlineUsersVector = new Vector ();#035 /创建服务器端侦听线程#036 listenThread = #037 new ServerListenThread (serverSocket,#038 onlineU

28、sersVector, logoinfoJTxtArea); #039#040 /启动服务器侦听线程#041 listenThread.start (); #042 catch(IOException ioe) #043 ioe.printStackTrace ();#044 /返回错误消息#045 JOptionPane.showMessageDialog (this,#046 msg_config.getString (msg.serverstart.fault),#047 msg_config.getString (msg.title.fault),#048 JOptionPane.ER

29、ROR_MESSAGE);#049 System.exit (1);#050 #051 表3-1启动服务器代码上面这段代码看上去有很多,其实完成的功能很简单。首先取得消息配置资源实例(代码行#004)和网络配置资源实例(代码行#005)。紧接着创建服务器端套接字(代码行#007),注意,这里可能会抛出IOException,必须捕获。服务器端的通信端口号是从socketconfig.properties资源文件里取得的(默认设置为9000)。代码行#011调用自定义函数initComponentsState初始化界面组件的状态,initComponentsState函数共有两个参数。第一个参数

30、为布尔值,代表将组件设置为可用还是不可用。第二个参数是标题栏状态信息。startServer中调用该函数时,第一个参数传递的是false,代表“启动服务”工具栏按钮及启动菜单项均不可用。第二个参数的值是从消息资源文件中读取出来的。回到表3-1,从代码行#013至代码行#030是准备启动日志消息的过程。代码行#018调用CommonUtils工具类的getServerIP方法取得服务器端IP地址,该方法需要一个ServerSocket实例作为参数。该方法的实现代码如下:表3-2 获取IP的代码#001 public static String getServerIP(ServerSocket s

31、erverSocket)#002 String ipString = null;#003 try#004 ipString=#005 serverSocket.getInetAddress ().getLocalHost ().toString ();#006 int index = ipString.lastIndexOf(/);#007 ipString = ipString.substring(index+1);#008 catch(UnknownHostException uhe)#009 uhe.printStackTrace ();#010 #011 return ipString

32、; #012 调用CommonUtils工具类的getServerPort方法取得服务端程序的端口号,该方法也需要一个ServerSocket实例作为参数。实现代码如下:表3-3 获取PORT的代码#001 public static String getServerPort(ServerSocket serverSocket)#002 String ipPort = null;#003 ipPort = String.valueOf (serverSocket.getLocalPort ();#004 return ipPort;#005 调用CommonUtils工具类的getCurren

33、tTime获得服务器的当前时间。对于长字符串拼接的操作,一般不建议使用“+”运算符,因为每一次字符串相加的结果都会产生一个新的字符串对象。使用StringBuffer类,该类使用append方法将字符串连接起来,不会产生新的字符串,它同时还提供了一些对子字符串进行操作的方法。表3-1中代码行#032将把准备好的启动信息显示在logoinfoJTxtArea中。下面得到了一个在线用户集合的引用(代码行#034)。紧接着创建了一个服务器端的侦听线程,并通过调用start方法启动了该线程。如果在创建服务器端套接字时出现了问题,比如端口被占用的情况,这时会抛出一个IOException,对该异常进行了

34、捕获,同时将错误信息返回给用户。然后调用System类的exit方法退出应用程序。服务器端主窗体已经实现,下面将介绍的是在主界面启动时,创建并启动的服务器侦听线程(ServerListenThread),它随时等待客户端的上线请求。3.3.2 实现ServerListenThread上面介绍了startServer方法执行到最后,创建了一个服务器端的侦听线程,这个线程既然是线程类,那么就要实现该类的run方法,把要完成的任务写在run方法中。该类的属性作用:serverSocket(SeverSocket类实例):侦听客户端的请求;onlineUsersVector(Vector类实例):记录

35、在线用户的集合logoinfoJTxtArea(JTextField类实例):显示服务器运行的日志消息;stop(布尔值):线程停止的标志;receiveThread(ServerReceiveThread类实例):负责接收、转发客户端用户的聊天消息;userbl(UserInfoBL类实例):负责验证用户身份,将注册用户加入在线用户集合;msgStrBuf(StringBuffer类实例):负责准备服务器运行的日志消息。下面是该类run方法的实现代码,由于代码比较长,先列出该方法要实现的主要功能:表3-4 侦听线程中的run方法#001 public void run () #002 try

36、 #003 while(!stop & !getServerSockt ().isClosed () #004 #005 /为每个请求创建一个连接,并针对该连接生成一个在线用户实例 #006 . 这里是创建新连接和在线用户的代码 /1#007 #008 /处理客户端请求的头信息 #009 . 这里是处理客户端请求头信息的代码 /2#010#011 /如果头信息是”Login”,处理登录请求#012 . 这里是处理登录请求的代码 /3#013 #014 /如果头信息是”ShutDown”#015 . 这里是处理服务器关闭的代码 /4#016 #017 catch(SocketException

37、se) #018 se.printStackTrace ();#019 catch(IOException ioe) #020 ioe.printStackTrace ();#021 #022 1 为每个请求创建一个连接,并针对该连接生成一个新的在线用户的代码:表3-5 为客户创建连接的代码#001 /为每一个客户端请求创建一个新连接#002 Socket socket = new Socket ();#003 socket = this.getServerSockt ().accept ();#004 /创建新的在线用户实例#005 OnlineUser onlineuser = new O

38、nlineUser ();#006 onlineuser.setSocket (socket);#007 /设置在线用户消息接收实例#008 BufferedReader in = new BufferedReader (#009 new InputStreamReader (onlineuser.getSocket ().getInputStream ();#010 onlineuser.setIn (in);#011 /设置在线用户消息发送实例#012 PrintWriter out = new PrintWriter (onlineuser.getSocket ().getOutputS

39、tream ();#013 onlineuser.setOut (out);为每个客户端的请求创建一个新的OnlineUser实例是因为服务器端程序的这个侦听线程只负责接收客户端的请求,想要为多个在线用户同时提供收发消息的服务,需要为每个在线用户创建另外一个单独的接收线程(即后面将要阐述的ServerReceiveThread),在创建这个接收线程的时候,就把每个OnlineUser实例当作参数传递给该实例的构造函数,因为OnlineUser实例具备收发消息的实例属性。这样以来,只要是通过身份验证的客户端请求,服务器都会为它创建一个新的服务器端接收线程,这个线程负责为每个在线用户提供接收和转发

40、消息的服务。2 处理客户端请求头的信息当一个客户与服务器建立了连接后,首先要向服务器发送一个标志字符串,说明要做什么。这就是请求头信息。代码中的actionString就是服务器端从客户端那里获得的请求头信息。它是通过调用每个在线用户的消息接收实例(BufferedReader)的readLine方法获得的。取得头信息之后将对它进行判断。处理用户“登录”的代码:表3-6 处理登录的代码#001 if(actionString.equals (Login) #002 String useraccountString = null;#003 String passwordString = null

41、;#004 /从客户端读取用户帐号#005 useraccountString = onlineuser.getIn ().readLine ();#006 /从客户端读取密码#007 passwordString = onlineuser.getIn ().readLine ();#008 onlineuser.setUserAccount (useraccountString);#009 onlineuser.setPwd (passwordString);#010 /检查用户是否已经登录#011 Iterator iterator = onlineUsersVector.iterator

42、 ();#012 OnlineUser tempUser = null;#013 isOnline = false;#014 while(iterator.hasNext () #015 tempUser = (OnlineUser)iterator.next ();#016 if(tempUser.getUserAccount ().equals (useraccountString) #017 isOnline = true;#018 break;#019 #020 #021 if(!isOnline) #022 /验证登录用户身份#023 if(userbl.verifiedUser (onlineuser) #024 sendOnlineInfoToAllUsers (onlineuser.getUserAccount ();#025 onlineuser.getOut ().write (

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1