1、。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端架构(C/S)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和JAVA语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统。关键字:JAVA;分布式;局域网; Socket;C/SDistributed JAVA-based chat systemStudent:Supervisor:*Abs
2、tract: Along with the fast development of Internet, the network chating tool has already become one kind of important communication tools and received more and more web cams favor. At present, many extremely good chating tools have appeared . for example, Netmeeting, QQ, MSN-Messager and so on. This
3、 system development mainly includes two aspects of the server procedure of the network chat and the customer procedure of the network chat. The former establishes the server through the Socket, the server can read and deliver the information which client side sends, and can renovate the users tabula
4、tion. The latter make a connection with the server, carries on communication between the client side and the client side. With the LAN correspondence mechanism principle, through inheritting the Thread kind to establish the multithreading directly. In the development, it uses the elementary theory k
5、nowledge which the computer network programmes. for example, TCP/IP agreement, Client/Server pattern, network programming design method and so on. In the network programming, it realizes reading and transmission of the information, that is,informaton flows realize the information exchange, introduce
6、 information flow analysis for realizing a system, in which containes some basic software engineering methods. After analyzes these situations, this LAN chating tool takes Eclipse as the basic development environment and compiles in JAVA language. first, it will establish the system application prot
7、otype in a short time. then, for the initial prototype system, it needs constantly revised and improved, until a viable system.Key words:JAVA; distributed; lan; Socket;C/S 前言网上流行的诸如QQ的即时聊天工具是我们所熟知的聊天系统,只要记得对方的号码,上网时可以呼他,无论他在哪里,都可以和他进行即时聊天。这些软件系统大多都采用C/S工作模式,制作这些软件的公司在互联网上免费提供下载客户端程序,却不提供服务器程序。所以对于未与
8、互联网连接的私有网络,这些软件根本就用不上,更不会提供程序源代码。为了弄懂这些软件的工作原理,所以我就开始着手本课题的研究。分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在
9、哪个站点上执行等。基于网络的软件系统大多都是分布式系统,只不过在系统的复杂程度上有所区别而已。这次研究的聊天系统就是典型的分布式系统。JAVA本身就是一种分布式语言。JAVA语言支持Internet应用的开发,在基本的JAVA应用编程接口中有一个网络应用编程接口(JAVA net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。JAVA的RMI(远程方法激活)机制也是开发分布式应用的重要手段。1 概述1.1 开发背景随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持, 而聊天室是人们最常见, 最直接的网上交流的方
10、式。本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台。其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求,易于维护和更新。1.2 JAVA语言简介JAVA是一个由Sun公司开发而成的新一代编程语言。使用它可在不同种机器、不同种操作平台的网络环境中开发软件。不论你使用的是哪一种WWW浏览器,哪一种计算机,哪一种操作系统,只要WWW浏览器上面注明了“支持JAVA”,你就可以看到生动的主页。JAVA已经逐步成为Internet应用的主要开发语言。它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。
11、JAVA的出现是计算机信息交换的一个重要里程碑。在单机时代,程序进程之间靠共享存储进行变量交换;在网络时代,运行在不同宿主机上的程序按网络协议进行无格式的消息(二进制字符流)交换,消息的语义由交换程序双方维护;在JAVA时代,运行在网络上的程序进程交换的是小应用程序(Applet)。它是一个对象,由一组属性和方法构成,是一个可执行的实体;不仅有数据的状态,而且有定义在数据上的操作。未来可能进行代表(Agent)交换,代理有一定的智能性,那便是信息交换的更高级阶段。1.2.1 JAVA语言的特点1.简单性2.面向对象JAVA语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对
12、象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。3.分布性JAVA是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其它对象。4.鲁棒性5.安全性用于网络、分布环境下的JAVA必须要防止病毒的入侵。JAVA不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用 “特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易 产生的错误。6.体系结构中立7.可移植性8.解释执行9.高性能10.多线程多线
13、程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。11.动态性1.2.2 JAVA环境配置 本方案设计采用Eclipse ,在进行具体的操作之前,需要给系统下载安装jdk,安装完成jdk之后,还需要对系统环境变量进行设置。步骤如下:第一步:进入我的桌面,右击“我的电脑”,选择“属性”选项,进入“系统属性“对话框,单击”高级标签“,如图1-1所示。第二步:点击上图箭头所示“环境变量”,进入图1-2画面。 图1-1 系统属性 图1-2 环境变量第
14、三步:单击“系统变量”部分的“新建按扭”,创建JAVA-HOME变量,在变量值栏内输入C:jdk1.4.2_05; 如图1-3所示:JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径C:jdk1.4.2_05,此路径下包括lib,bin,jre等文件夹。图1-3 编辑系统变量第四步:同样的方法创建CLASSPATH 变量,在变量栏内输入.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar (要加.表示当前路径)CLASSPATH为JAVA加载类(class or lib)路径,只有类在classpath中,JAVA命令才能识别。第五步:在变量栏内输入%
15、JAVA_HOME%bin;%JAVA_HOME%jrebin创建PAT,Path使得系统可以在任何路径下识别JAVA命令。第六步:检测配置是否成功:编写一个JAVA程序,例如:public class HelloWorldApp public static void main(String args) System.out.println(“HelloWorld!”); 首先把它放到一个名为HelloWorldApp.java的文件中,这里,文件名应和类名相同,因为JAVA解释器要求公共类必须放在与其同名的文件中。然后对它进行编译:c:JAVAc g HelloWorldApp.java编译
16、的结果是生成字节码文件HelloWorldApp.class。最后用JAVA解释器来运行该字节码文件:JAVA HelloWorldApp结果是在屏幕上显示“Hello World!”。表明环境变量配置成功。1.3 分布式简介所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中
17、单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。1.分布式应用最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,您可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命;您可以寻找超过1000万位数字的梅森质数;您也可以寻找并发现对抗艾滋病病毒的更为有效的药物。这些项目都很庞大,需要惊人的计算量,仅仅由单个的电脑或是个人在一个能让人接受的时间内计算完成是决不可能的。2.分布式计算与互联网的普及随着计算机的普及,个人电脑开始进入千家万户。与之伴随产生的是电脑的利用问题。越来越多的电脑处于闲置状态,即使在开机状态下CPU的
18、潜力也远远不能被完全利用。我们可以想象,一台家用的计算机将大多数的时间花费在“等待”上面。即便是使用者实际使用他们的计算机时,处理器依然是寂静的消费,依然是不计其数的等待(等待输入,但实际上并没有做什么)。互联网的出现, 使得连接调用所有这些拥有限制计算资源的计算机系统成为了现实。1.4 JAVA语言在分布式系统的应用分布式计算不是一门年轻的技术,早在上个世纪年代末便已是计算机科学的一个独立分支了;它也不是一门冷僻的技术,从C/S模式到P2P模式,从集群计算到网格计算,乃至风靡当下的云计算,都是其表演的舞台。另一方面,JAVA作为一门应网络而生的语言,对分布式计算有着天然的友好性,同时也是当今
19、最流行的编程语言。然而令人稍感意外的是,以“分布式JAVA应用”为专题的书籍并不多见,佳作则更少。至于国人所著者,请恕在下孤陋,尚未得见。不过细想之下,其实不足为奇。要开发一个高质量的分布式JAVA应用,以达到高性能、可伸缩、高可用、低延迟的要求,同时保证一致性、容错性、可恢复性和安全性,是何等的不易啊。它对程序开发的挑战在于:不仅需要对JAVA语言、类库、各种框架及相关工具极为熟悉,还需要对底层的JVM机制、各种网络协议有足够的了解;它对分析设计的挑战在于:不仅需要熟悉传统的应用架构模式,还需要掌握适用于分布式应用的架构模式和算法设计。此外,分布式应用对数据库管理员、测试分析人员等也提出了更
20、高的要求。大型应用通常会拆分为多个子系统来实现,对于JAVA来说,这些子系统可能部署在同一台机器的多个不同的JVM中,也可能部署在不同的机器上,但这些子系统又不是完全独立的,要相互通信来共同实现业务功能,对于此类JAVA应用,我们称之为分布式JAVA应用。对于分布式JAVA应用,本系统设计主要采用一种非常典型的方法来实现,即基于消息方式实现系统间的通信方式:当系统之间要通信时,就向外发送消息,消息可以是字节流、字节数组,甚至是JAVA对象,其他系统接收到消息后则进行相应的业务处理。消息方式的系统间通信,通常基于网络协议来实现,常用的实现系统间通信的协议有:TCPIP和UDPIP。TCPIP是一
21、种可靠的网络数据传输的协议。TCPIP要求通信双方首先建立连接,之后再进行数据的传输。TCPIP负责保证数据传输的可靠性,包括数据的可到达、数据到达的顺序等,但由于TCPIP需要保证连接及数据传输的可靠,因此可能会牺牲一些性能。UDPIP是一种不保证数据一定到达的网络数据传输协议。UDPIP并不直接给通信的双方建立连接,而是发送到网络上进行传递。由于UDPIP不建立连接,并且不能保证数据传输的可靠,因此性能上表现相对较好,但可能会出现数据丢失以及数据乱序的现象。2 需求分析2.1 系统说明聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成
22、了一半。首先来看一下服务器端的任务:1服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。2服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。以上就是服务器端最主要的两个任务。不难看出,服务器端的任务并不复杂。客户端应该完成的工作包括:1与服务器端建立通信通道,向服务器端发送信息。2接收来自服务器的信息。相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。2.2 系统功能简介2.2.1 基本功能1户可以注册。2用户可以登录。
23、3用户可以添加好友。4用户可以删除好友。5用户可以发送和接收消息。2.2.2 界面设计程序界面主要参考腾迅公司的QQ2000,在实现时采用的JAVA的Swing图形包。开发工具用的是Eclipse。用户在使用的过程中一目了然。3 系统设计3.1 系统设计思想 聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:1实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务
24、器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。2服务器端工作流程服务器端通过Socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。3客户端工作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。3 .2 聊天
25、系统的功能模块设计3.2.1 聊天系统工作原理图:图3-1 聊天系统原理图3.2.2 聊天系统功能图图3-2 聊天系统功能结构图3.2.3 数据库设计 系统采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的SQL Server2000作为后台数据库。通过对现在流行的一些Icq的参考,建立数据库,名为javaicq,数据库共建立两个表,一个是用户的基本信息,包括呢称,Jicq号码等。一个是用户的好友表,包括用户自己的号码和好友的号码。(1)用户的基本信息表(表名icq)表3-1 用户的基本信息表(表名icq)序号字段名含义数据类型NULL1Icqno用户的号码intN
26、o2Nickname用户的呢称Char3Password用户的密码4Status用户在线否Bit5Ip用户IP地址Yes6Info用户的资料Varchar7Pic用户的头像号Int8Sex用户性别9Email用户的email10Place用户的籍贯yes其中Icqno字段为自动增加。(其他还可以添加诸如电话号码等字段作为更多选择)(2)用户的好友表(表名friend)表3-2 用户的好友表(表名friend)Friend好友的号码4 详细设计4.1 开发环境工具基于JAVA聊天系统的设计主要运用JAVA与语言与Socket类结合而开发。其开发的主要环境包括: 服务器端:(Windows平台)首
27、先应有JAVA环境jdk,建议采用jdk1.4以上,另外还需配置classpath环境变量,本系统开发工具为Eclipse。客户端:只要有JAVA环境jdk就可以,建议jdk1.4。4.2 详细代码及说明(因篇幅有限,省略代码)4.2.1 服务器程序设计 服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,JAVA API为处理套接口的通信提供了一个类.Socket.,使得编写网络应用程序相对容易服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调
28、用accept()方法接受客户程序的连接4.2.2 客户程序设计(部分) 客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造BufferedReader,PrintWriter来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如注册,登录,查找好友等,服务器收到来自客户的请求后,针对不同的消息处理请求, 虽然UDP不可靠但是对于icq可靠性并不太重要,而且UDP快速,所以客户间发送信息通过UDP用户登录时通过类Datagram
29、Packet和DatagramSocket创建UDP包括其本地接受端口以及发送端口,默认端口为5000和5001,通过取得的好友的IP地址来向好友发送消息(send(DatagramPacket)和接受消息(receive(DatagramPacket)。当用户通过UDP收到消息后,可以通过DatagramPacket的方法InetAddress getAddress()得到对方的ip地址,通过对好友列表比较以判断是谁并提示用户收到某某的消息,然后用户选择该用户查看消息,如果好友列表没有该人就显示收到陌生人的消息。用户可以按陌生人按钮查看消息。1.用户注册。当服务器收到用户的注册请求,便开始接受客户传第的信息,诸如客户的呢称啦,性别,籍贯,头像,个人资料等,接受完毕后,便通过JdbcOdbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其Jicq号码,并在数据库中注册用户的IP地址,然后更新其Status为1即用户在线。客户收到服务器返回的信息后,便打开主程序窗口,并同时开始创建UDP以便在用
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1