1、 Instant Message;C/S mode;P-P mode目录前言从20世纪90年代开始,公共的即时消息和实时通讯逐渐成为了人们重要的沟通工具, 如MAIL、QQ、MSN等。但是,公共的即时信息给人们带来方便的同时,也带来了极大的安全隐患,当今网络,木马程序、病毒和其他恶意软件横行,稍不注意,电脑就会中毒。对于企业,使用公共的即时消息是一种安全威胁。公共的即时通讯,正成为病毒和其他恶意软件入侵企业计算机的一个渠道,这意味着最终用户能够把敏感的数据外传。为此校园内部即时通讯工具应运而生,本工具从源头上解决了这一隐患,专为校园而设计,通讯服务器就直接置于校园内部,所有信息由校园自己管理,
2、让校园以更安全、更可伸缩和更易于管理的方式灵活方便地使用协同和通讯服务的功能。校园即时通讯:,它是一种面向校园学生终端使用者的沟通工具服务,使用者可以通过安装了即时通信的终端机进行两人或多人之间的实时沟通。校园即时通讯工具可以很好的解决校园通讯问题,面对学习目标和教学工作中可能出现的问题,必须加强师生的沟通,使每个学生都能及时地了解自己的工作内容和获取需要的资料。为解决这一问题,开发一个界面友好、易于操作的内部通讯软件成为校园的首选。整个系统从操作简便、界面友好、灵活、实用、安全的要求出发,实现通讯人员列表的维护、信息的发送与接收、搜索用户、访问资源、信使群发等功能。1.系统分析系统分析的主要
3、任务是将在系统详细调查中所得到的文档资料集中到一起。对组织内部整体管理状况和信息处理过程进行分析。它侧重于从业务全过程的角度进行分析。分析的主要内容是:业务和数据的流程是否通畅,是否合理;数据、业务过程和实现管理功能之间的关系;老系统管理模式改革和新系统管理方法的实现是否具有可行性等等。系统分析的目的是将用户的需求及其解决方法确定下来,这些需要确定的结果包括:开发者关于现有组织管理状况的了解;用户对信息系统功能的需求;数据和业务流程;管理功能和管理数据指标体系;新系统拟改动和新增的管理模型等等。系统分析所确定的内容是今后系统设计、系统实现的基础。系统分析从系统需求入手,从用户观点出发建立系统用
4、户模型。用户模型从概念上全方位表达系统需求及系统与用户的相互关系。系统分析在用户模型的基础上,建立适应性强的独立于系统实现环境的逻辑结构。分析阶段独立于系统实现环境,可以保证建立起来的系统结构具有相对的稳定性,便于系统维护、移植或扩充。下面我们从可行性分析、功能分析、环境需求、性能需求、用户需求来进行系统分析。1.1可行性分析计算机技术的飞速发展,使计算机应用技术在企业管理中也得到了迅速的普及,人们开始通过计算机对实务工作中的各项信息进行管理,以帮助学生及老师提高学习和工作的效率。学生与学生之间、老师与学生之间的信息沟通也是信息化管理的一部分,利用计算机实现工作中的各种问题的沟通,例如学习任务
5、通知、技术资料传递等。本系统根据学生与老师学习工作中可能遇到的各种沟通问题开发而成,能够很好的避免工作中的错误,真正实现了企业的信息化管理。1.2功能分析本系统要实现的功能如下:新用户注册:一般用户都想知道其他用户的一些基本资料,比如姓名、年龄、地址、IP地址、电子邮箱等一些信息。查找以及添加好友:用户为了实现和其他人聊天。必须查找哪些人在线或者查找有哪些人使用该聊天工具.通过查找到的用户号码来实现添加其为好友。文字聊天:本聊天工具其实现的目的就是为了实现和用户间的沟通和交流,所以说文字聊天是必须具备的一项基本功能。用户个性化资料:用户申请的号码应该可以实现用户根据自己的喜好选择自己喜欢的图象
6、、自我介绍。查看聊天记录:用户在聊天的时候,难免会遇到把聊天窗口关掉。用户间的聊天信息也就看不到了。这样有可能导致用户不记得和其他用户的聊天内容,导致这种结果对用户的聊天带来很大的不便,所以应该实现聊天信息记录的保存和查找功能。用户管理:用户有时候要修改和查看自己的用户资料。这样本系统应该实现用户资料的查询和修改这基本功能。 1.3环境需求支持WIN95/98/NT/2000/XP操作系统C200,32M内存以上可以正常运行系统上必须装有Mysql数据库和JRE环境1.4性能需求尽量减少服务器的开销及数据传送负担,提高数据利用效率和数据传送效率,避免无效数据的传输。1.5用户需求现在社会是信息
7、化的社会,什么都追求着快、新、好。在这种快节奏的生活方式中,人们之间的通讯联系就显得非常的重要了。商业之间的合作,人们之间的友谊交往,甚至热门谈到的网上恋爱等等都需要通讯联系。而过去的鸿雁传书已经是满足不了现代人的欲望了。既然这网络这么的流行,过去的联系方式又这么的落后,因此人们的目光就转向了网络通讯。聊天工具就是一种网上很普遍但是又很重要的通讯方式。2.开发软件概述本节将详细介绍开发工具NetBeans、数据库的选择、通讯协议的选择及套接字的应用。2.1 NetBeans简介NetBeans是一个全功能的开放源码Java IDE,可以帮助开发人员编写、编译、调试和部署Java应用,并将版本控
8、制和XML编辑融入其众多功能之中。NetBeans 可支持Java 2平台标准版(J2SE)应用的创建、采用JSP和Servlet的2层Web应用的创建,以及用于2层Web应用的API及软件的核心组的创建。此外,NetBeans 最新牒还预装了两个Web服务器,即Tomcat和GlassFish,从而免除了繁琐的配置和安装过程。所有这些都为Java开发人员创造了一个可扩展的开放源多平台的Java IDE,以支持他们在各自所选择的环境中从事开发工作,如Solaris、Linux、Windows或Macintosh。NetBeans是一个为软件开发者而设计的自由、开放的IDE(集成开发环境),你可
9、以在这里获得许多需要的工具,包括建立桌面应用、企业级应用、WEB开发和JAVA移动应用程序开发、C/C+,甚至Ruby。NetBeans可以非常方便的安装于多种操作系统平台,包括Windows,Linux,Mac OS和Solaris等操作系统。2.2 MySQL简介MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购.对于Mysql的前途,没有任何人抱乐观的态度。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多
10、中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。在使用数据库时,我已经学过ACCESS和MySql两种数据库,综合考虑,我选择Mysql。因为Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器IIS假死,或者消耗掉服务器的内存导致服务器崩溃。Mysql是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。因
11、为现在数据库都使用标准的SQL语言对数据库进行管理,所以如果是标准SQL语言,两者基本上都可以通用的。Mysql还有更多的扩展,可以用存储过程,数据库大小无极限限制。如表2.1所示,Mysql数据库的特征及其与Access数据库的区别:表 2.1 Mysql数据库与Access数据库的区别内容Access特征MS SQL特征版本桌面版网络版 可支持跨界的公司异地使用数据库的要求节点一人工作,要锁定,其他人无法使用节点多,支持多重路由器管理权限否管理权限划分细致,对内安全性高防黑客功能数据库划分细致,对外防黑客能力高并发处理能力100人或稍多同时支持万人在线提交,在其他硬件例如网速等条件匹配的情
12、况下可完全实现导出XML格式可以,需要单作程序可导出成为XML格式,与Oracle数据库通用,减少开发成本数据处理能力一般快是否被优化过是2.3通讯协议的选择TCP与UDP有各自的优点。TCP是面向连接的协议,能满足大范围的应用程序的要求,能调节网际的动态环境,建立和管理本地通信进程之间的对话,维护TCP在流出和流入传输层TCP的模块的每个用户的状态和信息,拥有窗口流量控制机制和重传机制,实现非常可靠的数据传输,它的安全性和可靠性比UDP要高出很多。UDP是面向非连接的传输协议,UDP的应用程序在高可靠性、低延迟的网络中运行很好,在通讯子网QoS相对低下的情况下,可能无法正常运行,因为在于数据
13、包的频繁丢失。虽然UDP如此不可靠,但是由于它传输的高效率,仍然被广泛采用。在某些场合的一来一往只有两次数据报的交换中,UDP比TCP更加有效,因为TCP的建立连接和撤消连接的开销往往要大得多。QICQ在客户端与服务器端的协议采用了UDP,虽然在效率上占了优势,因为依照目前网络通讯的发展,通信子网在其性能上的提高,使得UDP可以发挥其强大的优势,但是安全性却实在令人担忧。综合考虑的结果,在本聊天工具的客户端和服务器端的通讯采用TCP协议。而客户与客户端的通讯采用UDP协议。2.4线程技术的应用在单线程系统中,如果系统进行如网络数据发送等在后台进行工作的应用程序时,程序界面就会处于死锁状态,无法
14、接受用户的输入。但在WIN95/NT中实行的是抢占式多任务,每一个进程可以同时执行多个任务,对于本系统,既要进行网络耗时工作,又要保持对用户的响应,使用多线程是最佳选择。以下是关于线程的一些概念。一般来说,把正在计算机中执行的程序叫做“进程”(Process) ,而不将其称为程序(Program)。所谓“线程”(Thread),是“进程”中某个单一顺序的控制流。现代的操作系统,如Mac,Windows NT,Windows 95等。大多采用多线程的概念,把线程视为基本执行单位。线程也是Java中的相当重要的组成部分之一。甚至最简单的Applet也是由多个线程来完成的。在Java中,任何一个Ap
15、plet的paint()和update()方法都是由AWT(Abstract Window Toolkit)绘图与事件处理线程调用的,而Applet 主要的里程碑方法init(),start(),stop()和destory()是由执行该Applet的应用调用的。单线程的概念没有什么新颖的地方,我感兴趣的是在一个程序中同时使用多个线程来完成不同的任务。某些地方用轻量进程(Lightweight Process)来代替线程,线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻量是由于它运行于整个程序的上下文内,能使用整个程序共有的资源和程序环境。作为单一顺序控制流,在运行的程序内线
16、程必须拥有一些资源作为必要的开销。例如:必须有执行堆栈和程序计数器。在线程内执行的代码只在它的上下文中起作用,因此某些地方用“执行上下文”来代替“线程”。 (1)线程体 所有的操作都发生在线程体中,在Java中线程体是从Thread类继承的run()方法,或实现Runnable接口的类中的run()方法。当线程产生并初始化后,实时系统调用它的run()方法。run()方法内的代码实现所产生线程的行为,它是线程的主要部分。(2)线程状态 新线程态(New Thread) 产生一个Thread对象就生成一个新线程。当线程处于“新线程”状态时,仅仅是一个空线程对象,它还没有分配到系统资源。因此只能启
17、动或终止它。任何其他操作都会引发异常。可运行态(Runnable) start()方法产生运行线程所必须的资源,调度线程执行,并且调用线程的run()方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程并不总是一直占用处理机。特别是对于只有一个处理机的PC而言,任何时刻只能有一个处于可运行态的线程占用处理 机。Java通过调度来实现多线程对处理机的共享。非运行态(Not Runnable) 当以下事件发生时,线程进入非运行态。a) suspend()方法被调用;b)sleep()方法被调用;c)线程使用wait()来等待条件变量;d)线程处于I/O等待。死亡态(Dead) 当run
18、()方法返回,或别的线程调用stop()方法,线程进入死亡态。通常Applet使用它的stop()方法来终止它产生的所有线程。(3)线程优先级 虽然我们说线程是并发运行的。然而事实常常并非如此。正如前面谈到的,当系统中只有一个CPU时,以某种顺序在单CPU情况下执行多线程被称为调度(scheduling)。Java采用的是一种简单、固定的调度法,即固定优先级调度。这种算法是根据处于可运行态线程的相对优先级来实行调度。当线程产生时,它继承原线程的优先级。在需要时可对优先级进行修改。在任何时刻,如果有多条线程等待运行,系统选择优先级最高的可运行线程运行。只有当它停止、自动放弃、或由于某种原因成为非
19、运行态低优先级的线程才能运行。如果两个线程具有相同的优先级,它们将被交替地运行。Java实时系统的线程调度算法还是强制性的,在任何时刻,如果一个比其他线程优先级都高的线程的状态变为可运行态,实时系统将选择该线程来运行。(4)幽灵线程 任何一个Java线程都能成为幽灵线程。它是作为运行于同一个进程内的对象和线程的服务提供者。例如,HotJava浏览器有一个称为“后台图片阅读器”的幽灵线程,它为需要图片的对象和线程从文件系统或网络读入图片。幽灵线程是应用中典型的独立线程。它为同一应用中的其他对象和线程提供服务。幽灵线程的run()方法一般都是无限循环,等待服务请求。(5)线程组 每个Java线程都
20、是某个线程组的成员。线程组提供一种机制,使得多个线程集于一个对象内,能对它们实行整体操作。譬如,你能用一个方法调用来启动或挂起组内的所有线程。Java线程组由ThreadGroup类实现。当线程产生时,可以指定线程组或由实时系统将其放入某个缺省的线程组内。线程只能属于一个线程组,并且当线程产生后不能改变它所属的线程组。2.5套接字SOCKET的应用2.5.1套接字SOCKET的基本概念所谓socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。以J2SDK-1.5为例,Socket和ServerSocket类库位于
21、包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。重要的Socket API:.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。Accept方法用于产生“阻塞”,直到接受到一个连接,并且返回
22、一个客户端的Socket对象实例。“阻塞”是一个术语,它使程序运行暂时“停留”在这个地方,直到一个会话产生,然后程序继续;通常阻塞是由循环产生的。getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例。getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。注意:其中getInputStream和getOutputStream方法均会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。2.5.2Server-Client模型开发原理服务器,使用ServerSock
23、et监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。3.总体设计程序设计离不开流程图,本节讲解即时通讯程序开发的设计原理图、服务器端时序图、及用户时序图。3.1系统原理图图 3.1 系统原理图如图3.1所示,系统原理图,客户机与服务器之间的通信。
24、服务器建立监听Socket,客户端想服务器端发出创建Socket申请,建立连接后开始创建Socet,最后关闭Socket。3.2服务器端时序图:客户登陆、注册时的服务器端时序图如图3.2:图 3.2 服务器端时序图图3.2说明:服务器接每次与一个客户连接以后,就会去创建一个监听线程。通过线程来接收客户端发送的所有数据。如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果。最后监听线程会通过Socket将结果返回给客户端。3.3用户活动图1)用户登陆活动图图 3.3 用户登陆活动图图3.3说明:
25、首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返回一个提示信息。如果登陆成功,就更新在线状态。通知所有好友自己已经上线。2)客户之间的通信活动图图3.4客户通信活动图图3.4说明:短消息发送以后,服务器端对应的监听线程会接收到一个数据包。此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。如果不在线,就写入数据库。3)客户之间的文件传送活动图 图3.5说明:客户端向服务器发送文件下载请求。如果服务器端同意下载,就读取文件流并将数据流写入到客户端。客户端读取到文件名之后,立刻创建一个新的文件并将读取的数据写入到文件中。图 3.5 客户传送文件活动图4.数据总体结构设计数据库技术是信息资源管理最有效的手段。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,有效存储数据,满足用户信息要求和处理要求。数据库设计中需求分析阶段综合各个用户的应用需求(现实世界的需求),在概念设计阶段形成独立于机器特点、独立于各个DBMS产品的概念模式(信息世界模型),用E-R图来描述。在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型如关系模型,形成数据库逻辑模式。然后根据用户处理的要求,安全性的考虑,在基本表的基础上再建立必要的视图(VIEW)形成数据的外模式。在物理设计阶段根据DBMS特
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1