1、目 录1前言21.1 课题选择背景21.2 即时通讯的特点21.3 即时通讯系统的发展22系统需求分析33系统可行性分析34多点互动通讯系统原理34.1 套接字通讯34.2 数据报通信44.3 多线程编程45总体设计45.1 功能设计55.2 界面设计66详细设计66.1 服务器端详细设计66.2 客户端详细设计107系统测试127.1 服务器端测试127.2 客户端测试15结束语16致谢16参考文献17基于JAVA套接字的实现多点互动通讯系统摘要:在计算机网络技术飞速发展的今天,网络即时通信倍受人们的喜爱,网络即时通信比起传统的通信方式会来得更加的方便快捷。同时,网络即时通信能够实现实时交互
2、,并且有资费低廉的优点。它的出现促进了人们之间的交流,成为人们生活中的一部分。本着学习的目的,开发了这套多点互动通讯系统,来实现多个点的用户之间的相互通讯。系统通过Java套接字实现,套接字在所有的网络操作系统中都是必不可少的,而且在所有的网络应用程序中也是必不可少的。它是网络通信中应用程序对应的进程和网络协议之间的接口。文章就系统的编写过程做出细致的介绍。关键词:即时通信;多点互动通讯系统;Java套接字Multiple-point Communication System based on JAVA Socket TechniquesXXX(Electronic & Information
3、 Engineering Department, Supervisor: XXX)Abstract: With the fast-developing of computer Internet technology, people favour more about instant communication on Internet. Compared with the traditional communication methods , it is of great advantage of being convenient and quickly, meanwhile, the Net-
4、work instant communication can realize dynamic interact between computer and users , moreover, it wont cost a lot . Instant telecommunication is gradually becoming a part of people life, for that it really promotes mutual communication. For the purpose of study, I developed a set of Multiple-point c
5、ommunication system, which tends to accomplish different users communication with each other. The system through the Java socket realize, sockets in all the network operating system is indispensable, and in all the network application is also essential. It is of network communication application cor
6、responding process and network protocol of the interface between. Follows are the detailed introduction for my system.Keywords: Instant communication; Mutiple-point communication system; Java socket1前言众所周知,现在网络正在飞速的发展和不断的完善成熟。人们通过网络聊天工具来进行交流、联系也变得越来越普遍。本课题研究的就是一个即时通讯系统:多点互动通讯的系统,本系统需要用到Java语言来进行编写。1
7、.1 课题选择背景在当今,网络通讯技术迅猛发展。通过即时通讯方式进行交流也变成家常便饭,备受人们喜爱。即时通讯工具可以实现远距离的交流,促进人们之间的联系,使远距离的快速通讯成为现实,加快了消息传播的速度。把世界的所有地方和角落联系在一起,变成了一个地球村。如今常用的即时通讯工具有很多,例如ICQ。我们知道ICQ是最早的即时通讯软件,也是现在最流行的即时通讯工具之一。ICQ是“I seek you”的谐音。翻译过来就是“我在找你”的意思。无论你人在何地何处,只要记得想联系的人的号码,上网打开ICQ,就能随心所欲的交流。目前有种类众多的即时通讯系统,能实现的功能也较为丰富。本课题目的是为了实现多
8、点的通讯,多点实现彼此之间可靠地交流。提高一定的安全和工作效率。本课题能使自己熟练掌握即时通讯的原理和机制,为自己以后网络通讯编程打下坚实的基础。此系统分为客户端部分、服务器部分。能够支持局域网和因特网。通过连接网络,就能实现用户之间的联系。大大提高了多个点的用户之间的通讯和办事效率。QQ、MSN等都是我们身边的公共通讯系统,针对性不强。并且想要聊天的对象、聊天的内容不好控制。如果使用在在局域网内部的话。工作的效率和安全都有可能会降低。然而该系统是放在自己的服务器上运行的。由自己内部的人员管理。这样能很好的解决效率和安全的问题。即时通讯增加了更多的互动性。当人们在表达自己的想法、意见时。总是采
9、用你来我往的方式。此方法带来了更多的互动。通过使用即时通讯系统,人们不再需要借助打电话、发短信等方式就能在线实时地交流工作。1.2 即时通讯的特点即时通讯是指能够即时发送和接收互联网消息等的业务。即时通讯是即时的。1大部分的即时通讯服务提供了presence awareness的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。在早期的即时通讯程序中,使用者输入的每一个字符都会即时显示在双方的银幕,且每一个字符的删除与修改都会即时的反应在银幕上。这种模式比起使用e-mail更像是电话交谈,充分体现了其实时特性。在现在的即时通讯程序中,为了画面的完整美观和交流方便,交谈中的另一方通常只会在
10、本地端按下送出键(Enter或是Ctrl+Enter)后才会看到信息。1.3 即时通讯系统的发展20世纪70年代早期,柏拉图系统(PLATO system)是一个比较早的即时通讯形式。80年代,UNIX/Linux的即时交谈被使用在工程师与学术界。当时有一定的影响力。到了90年代,即时通讯可以跨越操作系统平台进行交流,1996年11月,ICO的出现标志着首个非UNIX/Linux使用者用于因特网的即时通讯的系统软件。ICO应用很广泛,它的诞生促成了现在许多流行使用的即时通讯软件。ICO是由几个年轻的以色列人于1996年开发出来,考虑到无人投资,ICO公司决定提供全球互联网用户免费下载使用软件。
11、随着时间的推移,使用此软件的人数以每月100万的速度增加。成为许多看重其巨大商业广告价值的大公司争着购买的对象。1998年,ICO公司把这有巨大发展潜力的软件和用户一起以2.87亿美元的天价卖给了AOL。如今ICO有1亿多使用者,它的主要市场是在欧洲和美洲,可以说它是世界上最大的即时通讯系统。2系统需求分析随着计算机技术、网络技术的飞速发展,网络早已经是我们生活中必不可少的一部分。人们通过网络方式获取信息的需求越来越高。也对获取信息是否方便快捷提出了更高的要求,在这种社会氛围下促进了即时通讯系统软件的发展,也因为即时通讯的方便快捷的优点使得其越来越受到人们的青睐。近些年,用户使用即时通讯系统软
12、件的频率越来越高,它已经取代了e-mail在人们生活中的重要性。成为了用户之间交流、联系的最流行的软件。因此,对通讯系统软件的研究和开发很有很强的实际应用价值。本系统有两大部分组成。一个是服务器端程序:服务器端程序能够不断的监听是否有客户端连接,服务器采用的是MYSQL数据库来存储用户数据;另一个是客户端程序:客户端程序是在实际用户机子上运行的程序。有注册、登陆等功能。能够实现用户之间的即时通讯。本系统在Java平台下进行调试和开发。3系统可行性分析本系统着力完成用户和用户之间的信息交流,实现多点的通讯。从硬件设备上说,只需一台有固定IP地址的计算机被当作服务器来运行服务器程序。几台电脑运行客
13、户端程序,因为现在自己每个同学几乎都有一台电脑,所以要满足这要求一点也不困难。从开发时间上说,完成此系统需要几周时间。在几周时间内完成自己完全可以接受。从软件上说,开发此系统需要用到软件都是免费使用的,例如:Java平台、Eclipse调试环境等。所以开发此系统完全是可行的。4多点互动通讯系统原理4.1 套接字通讯套接字的英文名为“socket”。套接字允许程序员把网络连接当成一个流,并向这个流读写字节。2我们都知道在Java中有两个重要的类Socket和ServerSocket。Socket和ServerSocket都被放在包中。通过这两个类就能完成客户端与服务器、甚至是客户端与客户端的即时
14、通讯。首先通过ServerSocket类在服务器某固定端口等待连接,当有Socket请求连接到此服务器的此端口时,就完成Socket连接,然后相互之间就可以发送和接收信息。4.1.1 Socket类Socket类是Java用来实现客户端TCP操作的基础类,在Java编程中,一切与TCP有关的操作,包括连接的建立、传输、连接关闭及Socket选项的设置都由Socket类负责,这个类本身使用直接代码通过主机操作系统的本地TCP栈进行通信。Socket类的消息收发都是通过流来实现。通过new Socket()创建需要连接的指定的服务器host和端口号port的对象,并向服务器发送连接请求。通过clo
15、se()方法关闭已建立的套接字。4.1.2 ServerSocket类ServerSocket类能够在服务器端指定的端口监听。ServerSocket类通过new ServerSocke()能实现等待某客户端的连接请求的功能。跟Socket一样,也是通过close()方法关闭。4.2 数据报通信在TCP/IP协议中有一个重要的定义,那就是IP数据报(IP Datagram)。IP数据报是在Internet上传输的包。它和硬件的配置无关,是由两部分组成:首部和数据。首部的前20个字节是固定的,它是所有IP数据报都必须要有的,首部剩下部分的长度是可变的。根据需要进行相应分配。例如考虑排错或者安全等
16、因素需要。34.3 多线程编程多线程的目的是使对CPU的利用率提高到最大。4操作系统由原来的单任务发展到现在能够同时进行多任务。实现多任务就可以通过多线程。我们知道进程是指在电脑内存运行的一个应用程序。在内存中每个进程都是独立占用的内存空间。一个进程可以有很多个线程在运行。例如火车的售票系统,在售票系统运行过程中,在同一时间可能有很多人在进行买票操作。通过多线程方式能很好解决同时进行的操作。在操作系统中,每个线程都会有一个优先级。优先级高的线程在正常情况下比优先级低的先执行。Java实现多线程有两种方式:通过继承java.lang.Thread类和实现java.lang.Runnable接口。
17、4.3.1 Thread类Thread类提供了用来启动、挂起、恢复以及终止线程的方法,除此之外,还提供控制线程的优先级以及线程的名字等其他方面的方法。使用Thread类最简单的方法是扩展它,并覆盖run()方法,当线程启动时会调用这个方法。通过覆盖run()方法,就可以使线程在后台完成一些有用的任务。54.3.2 Runnable接口虽然扩展Thread类是创建多线程应用程序的一种方法,但是,它通常不是最好的方法。记住,Java只支持单继承,这与支持C+这样的多继承的语言不同。这意味着,如果一个类扩展了Thread类,它就不能扩展其他类。更好的方法是实现Runnable接口。Runnable接
18、口接口定义了一个方法,run(),必须实现这个方法。类实现这个接口,以表明它们可以作为独立的线程执行。5总体设计该多点互动通讯系统采用的是C/S架构,采用客户机/服务器(C/S)模式来设计,是一个二层的C/S结构,其分层机构如图1所示。客户层也叫做应用表示层,也就是我们说的客户端,这是应用程序的用户接口部分。给即时通讯工具设计一个客户层具有很多优点,这是因为客户层担负着用户与应用间的对话功能。它用于检查用户的输入数据,显示应用的输出数据。为了使用户能直接地进行操作,客户层需要使用图形用户接口。6若通讯用户变更,系统只需要改写显示控制和数据检查程序就可以了,而不会影响其他两层。服务层又叫做功能层
19、,相当于应用的本体,它是将具体的业务处理逻辑编入程序中。例如,用户需要检查数据,系统设法将有关检索要求的信息一次性地传送给功能层;而用户登录后,聊天登录信息是由功能层处理过的检索结果数据,它也是一次性传送给表示层的。在应用设计中,必须避免在表示层和功能层之间进行多次的数据交换,这就需要尽可能进行一次性的业务处理,达到优化整体设计的目的。图1 二层C/S结构示意图5.1 功能设计该多点互动通讯按如下过程完成通讯:(1)用户向服务器注册;(2)用户注册之后,向服务器发送消息;(3)服务器再把消息发送给相应的用户。根据以上描述,该系统功能模块图如图2所示图2多点互动通讯功能模块图5.1.1 服务器端
20、功能设计在服务器端的程序具有以下的功能实现:(1)开启服务器程序,进行监听,接收客户端连接。(2)接收消息、分析消息、转发消息。(3)关闭服务器端的程序,并向所有已连客户端发送服务器端程序已关闭消息。5.1.2 客户端功能设计在客户端的程序必须具有以下的功能实现:(1)用户注册。(2)请求连接服务器,并把此用户登录请求发给服务器端。(3)随时可以向服务器发送消息。(4)随时可以接收服务器端转发过来的消息。(5)响应服务器端程序已关闭消息。5.2 界面设计5.2.1 服务器端功能设计在服务器端的界面设计实现:有两个按钮,分别是开启服务和停止服务,把这两个按钮放入一个面板中,然后把此面板放入到窗体
21、中。此界面能实现服务器端的服务开启和停止的功能。5.2.2 客户器界面设计在客户端设计了五个界面:登入界面、注册界面、好友界面、聊天界面、修改密码界面。(1)登录界面设计实现:在登录界面中有两个输入框,能实现用户账号和密码的输入,并且密码输入是不可见的。还有三个按钮:登录、取消、注册向导。(2)注册界面设计实现:当点击登录界面登录按钮时,进入注册界面。注册界面能实现用户输入申请的账号,设置密码。还设计有注册和返回按钮来方便使用者的操作。(3)好友界面设计实现:登录成功后,进入好友界面。好友界面有:我的好友、陌生人、黑名单三个按钮。当点击我的好友时,能实现我的好友列表,当点击陌生人时,能实现陌生
22、人列表。(4)聊天界面设计实现:当双击列表中某好友时,跳出与此好友聊天的界面。聊天界面包括:聊天内容显示、输入聊天信息、发送聊天信息。(5)修改密码界面设计实现:当在登录界面点击修改密码时,进入修改密码界面。修改密码界面能实现输入账号、原有密码和需要修改的密码。还设计有修改密码和返回按钮来方便使用者的操作。6详细设计6.1 服务器端详细设计6.1.1 界面设计在java程序中,我们可以通过自己编写的类继承JFrame类的方法实现要创建的窗体。当我们用到JFrame类,我们需要导入java.awt.*和java.swing.*。我们要在窗体内加入一个装有控制按钮的面板(JPanel)。关键代码如
23、下:jPanel_show=new JPanel();jButton_start=new JButton(启动服务器);jButton_start.addActionListener(this);jButton_stop=new JButton(关闭服务器);jButton_stop.addActionListener(this);jPanel_show.add(jButton_start);jPanel_show.add(jButton_stop);this.add(jPanel_show);6.1.2 功能模块的实现本系统在C/S模式下进行开发,所以服务器端的程序设计至关重要。下面就服务器
24、端功能进行设计。服务器端界面有两个按钮,分别是jButton_start和jButton_stop。当点击jButton_start时,跳出是否开启服务器的对话框。点击确定时显示服务器启动对话框,服务器启动后通过ServerSocket Serve_socket =new ServerSocket(9898)语句在服务器9898端口进行监听操作。监听通过Serve_socket.accept()语句返回一个连接客户端的Socket。关键代码如下:Serve_socket = new ServerSocket(Address.port);/有连接则返回此套接字的连接. socket=Serve_
25、socket.accept();接收到客户端User后判断为登录操作时,则通过UserDao类中的dao.getPwdById()方法判断MYSQL数据库中是否有此用户,有则把Message的类型设为MessageType.loginSuccess,然后通过oos.writeObject()把此消息发给客户端,并用new SerConClientThread(socket)为此用户开一个服务器端的线程为此用户服务,并加入到服务器线程类里面去,SerConClientThread类可以实现用户消息接收、消息分析、消息转发,通过Serve_thread.notifyOther(u.getUserI
26、d()通知其它在线好友此用户上线。没有则把Message的类型设为MessageType.loginFail,然后通过oos.writeObject()把此消息发给客户端,并且关闭此Socket。关键代码如下:if(u.getUserTag().equals(userLogin) if(u.getPwd().equals(dao.getPwdById(u.getUserId() /return Login suceessm.setMesType(MessageType.loginSuccess);/返回给用户一个登入成功的消息oos.writeObject(m);/这里就单开一个线程,让该线程
27、与该客户端保持通信.SerConClientThread Serve_thread=new SerConClientThread(socket);ManageClientThread.addClientThread(u.getUserId(), Serve_thread);/启动与该客户端通信的线程.Serve_thread.start();/ notify Other who onlineServe_thread.notifyOther(u.getUserId();else /表明Fail Loginm.setMesType(MessageType.loginFail);oos.writeO
28、bject(m);/关闭Socketsocket.close(); 接收到客户端User后判断为注册标志时,则得到用户要注册的用户账号,通过dao.register()方法查找MYSQL数据库中是否有此用户账号,有则把Massage的类型设为注册不成功标志。通过oos.writeObject()把此消息发给客户端,发完后关闭在服务器端的此用户连接的Socket;没有则在服务器端User表中加入此用户,然后把Massage的类型设为注册成功标志,通过oos.writeObject()把此消息发给客户端,发完后关闭在服务器端的此用户连接的Socket。关键代码如下:if(u.getUserTag(
29、).equals(userRegister) if(dao.register(u.getUserId(), u.getPwd(), u.getUserName() m.setMesType(registerSuccess); else m.setMesType(registerFail);oos.writeObject(m);/写入消息socket.close(); 接收到客户端User后判断为修改密码标志时,则通过UserDao类中的getPwdById()方法判断MYSQL数据库中是否有此用户,有则通过dao.changPwd(u.getUserId(), u.getNewPwd()更新用
30、户密码,并把Massage的类型设为成功修改密码标志,通过oos.writeObject()把此消息发给客户端,发完后关闭在服务器端的此用户连接的Socket;反之把Massage的类型设为修改密码失败标志,通过oos.writeObject()把此消息发给客户端。发完后关闭在服务器端的此用户连接的Socket。关键代码如下:if(u.getPwd().equals(dao.getPwdById(u.getUserId() dao.changPwd(u.getUserId(), u.getNewPwd(); m.setMesType(changePwdSuccess); m.setCon(u.
31、getUserId(); else m.setMesType(changePwdFail);oos.writeObject(m);socket.close();按下jButton_stop时,跳出是否关闭服务器对话框。点击确定时显示服务器已关闭对话框。并通过notifyAllUserServerDown()通知所有在线用户服务器已关闭。通知所有在线用户的代码如下:public void notifyAllUserServerDown() /得到所有在线的人的线程HashMapstore_SerConClientThread=ManageClientThread.store_SerConClie
32、ntThread;Iterator it=store_SerConClientThread.keySet().iterator();while(it.hasNext() Message m=new Message();m.setMesType(MessageType.serverDown);String onLineUserId=it.next().toString();try Socket socket=ManageClientThread.getClientThread(onLineUserId).getSocket();ObjectOutputStreamoos=new ObjectOu
33、tputStream(socket.getOutputStream();m.setGetter(onLineUserId);oos.writeObject(m); catch (Exception e) e.printStackTrace();6.1.3 数据库设计当用户每次登陆时,需要到服务器的用户数据库中查找是否有此用户。还有每次执行注册操作时需要对数据库进行插入用户操作。所以数据库的设计非常重要。用户的信息有用户账号、用户密码、用户名字三个属性。把用户的信息放在User表中,通过对User表的查找或者插入操作完成本系统的运作。 表格如下:表1 User表 列表描述数据类型空/非空约束条件
34、userid用户账号Varchar(10)非空主键userpwd用户密码Varchar(10)非空当和离线好友聊天时,需要把发送的离线消息存储到服务器Message表中。当好友上线的时候就把数据库中的离线消息发给相应的客户,发送完后删除此条离线消息。表格如下:表2 Message表 列表描述数据类型空/非空约束条件gands聊天标志Varchar(20)非空主键getter收消息的人Varchar(10)非空sender发消息的人Varchar(10)非空message消息Varchar(500)6.2 客户端详细设计6.2.1 界面设计(1)登录界面设计跟服务器界面设计一样,需要定义一个继承
35、JFrame的类用来创建一个登录窗体。并在窗体内加入多个面板来放置相应的控件。在中部放置的面板有两个输入框,通过new JTextField()和new JPasswordField()生成输入框;在南部面板放置通过new JButton()创建的登录、取消、注册向导三个按钮。关键代码如下:jp2_jtf=new JTextField();jp2_jpf=new JPasswordField();jp1_jb1=new JButton(new ImageIcon(image/login.gif);jp1_jb2=new JButton(new ImageIcon(image/cancel.gi
36、f);jp1_jb3=new JButton(new ImageIcon(image/xiangdao.gif);(2)注册界面设计注册界面在创建窗体后,在中部放置的面板有三个输入框,通过new JTextField()生成用户账号的输入框,并new JPasswordField()生成密码输入框;在南部面板放置通过new JButton()创建的注册、取消两个按钮。关键代码如下:qqIdTag = new JLabel(账号,JLabel.CENTER);qqId = new JTextField();qqIdLabel = new JLabel();qqPwdTag = new JLabe
37、l(密码,JLabel.CENTER);qqPwd = new JPasswordField();qqPwdLabel = new JLabel();qqPwdAgainTag = new JLabel(再次输入,JLabel.CENTER);qqPwdAgain = new JPasswordField();qqPwdAgainLabel = new JLabel();(3)好友界面设计好友界面通过new JButton()来分别创建我的好友、陌生人、黑名单。通过点击我的好友可以得到我的好友列表。好友列表通过new JLabel()创建。关键代码如下:jpmsr_jb1=new JButto
38、n(我的好友);jpmsr_jb2=new JButton(陌生人);jpmsr_jb3=new JButton(黑名单);(4)聊天界面设计聊天界面通过new TextArea()和new JTextField()创建显示聊天信息和输入聊天信息的窗口。并通过new JButton()创建发送信息的按钮。关键代码如下:jta = new TextArea(, 0, 0, TextArea.SCROLLBARS_VERTICAL_ONLY);jta.setEditable(false);jta.setFont(new Font(宋体,1,20);jtf = new JTextField(25);
39、jb = new JButton(发送);(5)修改密码界面设计修改密码界面设计在创建窗体后,在中部放置的面板有四个输入框,通过new JTextField()生成用户账号的输入框,并new JPasswordField()生成密码输入框;在南部面板放置通过new JButton()创建的修改密码、返回两个按钮。关键代码如下:qqIdTag = new JLabel(账号,JLabel.CENTER);qqId = new JTextField();qqIdLabel = new JLabel();oldQqPwdTag = new JLabel(密码,JLabel.CENTER);oldQq
40、Pwd = new JPasswordField();oldQqPwdLabel = new JLabel();qqPwdTag = new JLabel(新密码,JLabel.CENTER);qqPwd = new JPasswordField();qqPwdLabel = new JLabel();qqPwdAgainTag = new JLabel(再次输入,JLabel.CENTER);qqPwdAgain = new JPasswordField();qqPwdAgainLabel = new JLabel();6.2.2 功能模块的实现在登录界面输入用户账号和密码。点击登录按钮时,
41、通过new Socket(Address.Ip,Address.port)试着连接服务器,如果存在服务器,则把此User的类型设为登录,发给对应的服务器。在服务器判断后给客户端发送消息。客户端收到消息,判断Message的类型,是MessageType.loginSuccess则开一个此Socket下为此用户服务的线程。把此线程加入到客户端线程类里面去。打开此用户的好友界面。并把此界面加入到客户端好友界面里面。然后要他自己的好友。点击取消按钮时,就执行this.dispose()方法退出当前的登录界面。点击注册向导按钮时,就跳转到用户注册界面。在用户注册界面上输入用户的相关内容,点击注册按钮。
42、点击后通过new Socket(Address.Ip,Address.port)试着进行连接服务器。若服务器存在,则把此User的类型设为注册,发给对应的服务器。当客户端的此连接端口收到消息后,判断是否注册成功,成功则把此Socket关闭,把用户注册界面关闭,显示注册成功的对话框。反之,关闭此Socket,显示已存在此账号,请重新输入申请账号的对话框。若是服务器不存在类型时,显示无法连接服务器,请检查是否联入网络的对话框。点击修改密码时,就跳转到用户修改密码界面。在用户修改界面上输入用户账号和原密码、新密码。点击修改按钮时,点击后通过new Socket(Address.Ip,Address.
43、port)试着进行连接服务器。若服务器存在,则把此User的类型设为修改密码,发给对应的服务器。当客户端的此连接端口收到消息后,判断是否修改成功,成功则把此Socket关闭,把用户修改密码界面关闭,显示修改密码成功的对话框。反之,关闭此Socket,显示用户修改密码失败的对话框。若是服务器不存在类型时,显示无法连接服务器,请检查是否联入网络的对话框。7系统测试7.1 服务器端测试(1)在运行服务器端程序后会出现图3所示图3 服务器端程序界面(2)点击启动服务器按钮后会跳出启动服务器的对话框,如图4所示。点击对话框确定按钮时服务器端程序启动,并且提示服务器已关闭,如图5所示。点击取消时表示不启动
44、。图4 启动服务器界面图5 显示服务器已启动(3)点击关闭服务器按钮后会跳出关闭服务器的对话框,如图6所示。点击对话框确定按钮时服务器端程序关闭,并且提示服务器已关闭,如图7所示。点击取消时表示不关闭。图6 关闭服务器界面图7 显示服务器已关闭(4)点击界面的关闭时跳出关闭窗口对话框,点击对话框确定按钮时服务器端程序关闭、界面退出,如图8所示,并且提示服务器已关闭,如图9所示。点击取消时表示不退出、不关闭。图8 关闭界面图9 显示服务器已关闭7.2 客户端测试(1)在运行客户端程序后会出现图10所示图10 账号登录界面(2)在登录界面上我们需要输入账号和密码,账号和密码只要有一个为空都会跳出不
45、能为空的对话框,如图11所示。当服务器启动时,点击登录按钮会进行用户验证,正确则登录,如图12所示。反之跳出用户名或密码错误的对话框如图13所示图11 提示用户和密码都不能为空图12 竹下一曲的好友界面图13 用户名或密码错误界面结束语: 众所周知,互联网从诞生以来,就开始影响着地球的每一个角落,给予了人类一种全新的生活方式,随着互联网技术的不断发展,新兴的技术也层出不穷,即时通讯系统就是这么一种以聊天形式为主的广受欢迎的互联网技术。当然,该课题讨论的多点互动通讯系统是定位于内部局域网,供班级内部人员使用的通讯系统。即时通讯中最基本的功能就是通过计算机之间的文本数据的互换的形式实现思想的交流和
46、沟通,它的优点是方便快捷,为人们之间创建了一种新型的、廉价的、快速的、简便的沟通方式。首先,本系统完全按照软件工程的瀑布模型进行开发,虽然缺少部分开发文档,但本论文则是按照需求分析,概要设计,详细设计,软件的运行和测试等的结构进行安排的。其次,本即时聊天系统采用了C/S模型。服务器在C/S模型中处于一个中心地位。服务器一般同时为多个客户提供服务,这就造成了服务器设计的复杂性。即时通讯服务器是数据中心,它是客户活动的中介,需要同时应对众多客户的请求。最后,在编写这个聊天程序时遇到许许多多的问题,比如Java的图形化界面如何编写,该怎样布局。这是Java的一个弱项,不像VB,VS等语言可以使用已有的控件。后来也在网上找到一些资料,实现基本的图形界面。经过
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922