ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:169.90KB ,
资源ID:27585070      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27585070.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(聊天程序java.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

聊天程序java.docx

1、聊天程序java目录前言 - 1 -工程概况 - 1 -正文 - 1 -2.1课程任务及要求 - 1 -2.2选题意义 - 2 -2.3 程序需求分析 - 2 -2.3.1可行性分析 - 2 -2.3.2 服务器端 - 2 -2.3.3 客户端 - 3 -2.4 算法设计 - 3 -2.4.1 UML图如下: - 3 -2.4.2 C/S模式套接字的连接 - 4 -2.4.3 文字聊天的实现 - 4 -2.5 程序设计与实现 - 5 -2.5.1建立连接 - 5 -2.5.2断开连接 - 5 -2.5.3 C/S模式套接字的连接 - 6 -2.6程序测试与分析 - 8 -2.6.1启动服务器

2、- 8 -2.6.2启动客户端 - 8 -2.6.3成功启动客户端 - 8 -2.6.4聊天过程 - 9 -2.6.5 断开连接 - 9 -2.7课程设计小结 - 10 -参考文献 - 10 -课程设计总结 - 11 -致谢 - 12 -附录 - 13 -前言JAVA程序设计教程是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。Java是一种可以撰写跨平台应用软件的面向对象的程序设

3、计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 工程概况一般来说,聊天工具大多数由客户端和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Socket类来链接客户机和服务器并使客户机和服

4、务器之间相互通信,由于聊天是多点的,而Java提供的多线程功能用多线程可完成多点的聊天。本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。使用JAVA语言编写,开发工具采用Eclipse。服务器设计与实现过程中,采用了多线程技术,可以在单个程序中同时运用多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用,正文2.1课程任务及要求课程设计可选用Eclipse等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。通过这次设计,要求掌握以下

5、内容:1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用2)类、包、接口的定义与使用3)常用工具类与算法的实现(数组、向量、字符串、链表)4)Java常用标准GUI组件及其事件处理5)Java的异常处理机制6)Java的数据库连接技术7)Java的多线程技术8)Java的网络编程课程设计选题:局域网聊天程序的设计与实现开发工具:Eclipse2.2选题意义局域网聊天软件,除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊天用户紧密联系在一起。通过网站信息向聊天用户群及时群发送,可以迅速吸引聊天用户群对网站的关注,从而加强网站的访问率与回头率。局域网聊天软件利用的是互联

6、网线路,通过文字、语音、视频、文件的信息交流与互动,有效节省了沟通双方的时间与经济成本;局域网聊天软件不但成为人们的沟通工具,还成为了人们利用其进行电子商务、工作、学习等交流的平台,将日常办公的传统沟通方式替换,有效的减少办公费用的同时,较之更有效率百分之一。2.3 程序需求分析2.3.1可行性分析经济可行性:由于本系统的主要背景是课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。技术可行性:本系统使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富

7、的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。2.3.2 服务器端服务器端主要是为各个客户端建立相互的联系。在服务器端建立起来后,客户端可以通过搜寻服务器端的IP地址和服务器端的端口地址和服务器建立联系。在服务器启动的过程中,服务器会在该主机上监听一个网络端口专

8、门为该程序服务,不断监听是否有客户端通过这个端口请求与服务器建立联系。在建立联系的过程中,需要客户端输入自己的昵称,服务器端会自动检测是否出现客户端重名的情况;然后在客户端输入服务器端的IP地址和该地址的主机端口。各个客户端在齐界面中输入聊天内容,通过服务器的转发,其他各个客户端都可以收到该客户端的信息;当客户端关闭时,服务器端会提示客户端退出。在服务器端要实现的功能:1)建立专用的网络端口;2)不断的监听建立的端口;3)与客户端建立联系;4)与客户端建立输入输出流管道;5)可以与客户端互相发送信息;6)处理用户注册;7)处理用户退出;2.3.3 客户端客户端是为每一个用户建立一个聊天的界面,

9、单独的客户端是无法运行的,必须与服务器端建立联系,客户端才能正常使用。在与服务器端建立联系的时候,需要输入客户端的昵称(用于区别各个用户),服务器端的IP地址,和该地址下的服务器端的端口,只有服务器端确认了客户端的连接并且显示正常,客户端才能与服务器端进行信息交互;在连接成功后,用户可以直接在客户界面直接输入消息,通过服务器把消息发送到其他客户端;如果服务器端关闭,客户端在发送消息时,会提示“服务器已关闭,发送失败”;当客户端退出时,会提示服务器端本客户端已退出。在客户端需要实现的功能:1)可以输入服务器端的IP地址以及对应端口;2)可以与服务器端进行信息交互;3)与服务器端建立输入输出流管道

10、。2.4 算法设计2.4.1 UML图如下:下图(图一)为局域网聊天系统的总体结构,已经大概的把服务器端和客户端所要实现的功能都体现了出来。服务器端的主要功能是:启动服务器,停止服务器,发送信息,接收信息。客户端的主要功能是:建立连接,断开连接,发送信息,接收信息。图一 系统总体结构2.4.2 C/S模式套接字的连接在系统实现信息传输时,服务器端和客户端通过输入输出流套接实现,在客户端建立输入流和输出流管道,在服务器端也建立相应的输入输出流管道,这样就可以通过JAVA软件实现文字信息交互。通过这种C/S模式,可以很好的提高系统的各项性能。2.4.3 文字聊天的实现在系统实现文字聊天时,首先,服

11、务器启动,并监测分配的主机端口号;客户端在启动时,会提示用户输入服务器端的IP地址和固定端口,只有两者都输入正确,客户端与服务器端才能正确连接;在客户端输入信息后,通过C/S模式的套接字连接方法实现文字聊天。2.5 程序设计与实现2.5.1建立连接建立连接前,需要先启动服务器端,使服务器端对分配的固定端口进行循环监听;客户端启动时,要手动输入服务器端的IP地址和对应的固定端口,输入正确后才能建立连接;流程图如下(图二):图二 连接示意图主要代码如下:(1) 服务器端 public class ChatServer:i. 启动服务器 public void start()ss = new Ser

12、verSocket(6543); onStart = true; System.out.println(服务器已成功启动!);ii. 客户端连接 public void start()while(onStart) Socket s = ss.accept(); Client c = new Client(s); clients.add(c); new Thread(c).start(); System.out.println(一个客户端成功连接!); (2) 客户端 public class ChatClient extends JFrame:System.out.print(请输入你的昵称:

13、); myName = scan.readLine(); System.out.print(请输入服务器的ip:(直接回车默认本机)); ip = scan.readLine();2.5.2断开连接断开连接有两种方法:一是,客户端正常退出,在服务器端会显示客户端退出;二是,服务器端可以主动关闭,客户端不会立即显示服务器关闭,会在客户端发送下一条信息时提示用户服务器端已经关闭;服务器端的主动关闭是非法的,所以要尽量的避免服务器的主动关闭流程图如下(图三):图三 断开连接示意图图主要代码如下:setText(服务器已断开,System); try if(dos != null) dos.close

14、(); if(s != null) s.close(); catch(Exception e11) System.out.println(关闭连接出错!); 2.5.3 C/S模式套接字的连接信息的传递是通过客户端与服务器端的输入输出流通道将信息通过TCP/IP协议打包传输,在客户端输入信息,通过JAVA的文字监控,将信息打包,通过管道传输;在客户端将信息发送出去后,服务器端会将信息发送至其他各个客户端;各个客户端收到信息后,会在其界面显示其他客户端发送的信息,格式为“用户名:信息”;流程图如下(图四):图四 C/S模式套接主要代码:i. 服务器端public Client(Socket s)

15、:public Client(Socket s) this.s = s; try dis = new DataInputStream(s.getInputStream(); dos = new DataOutputStream(s.getOutputStream(); onConnect = true; catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); public void send(String str) try dos.writeUTF(str); catch (IOException

16、 e) / TODO Auto-generated catch block e.printStackTrace(); ii. 客户端public void setText(String str1,String str2):public void setText(String str1,String str2) String s = ; if(str2.equals(System) /如果是系统提示,则加上系统提示: s = textArea.getText(); s += 系统提示: + str1 + rn; textArea.setText(s); else /其他的,什么都不加 s = t

17、extArea.getText(); s += str1 + rn; textArea.setText(s); 2.6程序测试与分析2.6.1启动服务器为了能够实现各个客户端之间能够实现信息的交互,所以需要有服务器端作为信息的中转,同时,有了服务器的存在,也可以使得客户端的数量大大增加,并且使得系统等性能大幅度提高;实际测试结果如下图(图五):图五 服务器启动2.6.2启动客户端在启动客户端的时候,需要输入用户自己的昵称,和服务器端的IP地址,服务器端的端口号在程序当中就已经实现了,所以不用输入端口号;这个界面没有做出图形界面,只是需要在终端窗口中输入。实际测试结果如下(图六):图六 客户端启

18、动2.6.3成功启动客户端在客户端启动时,如果输入的服务器IP地址正确,客户端的界面会跳出,而且服务器端也会提示有新的客户端成功连接;当显示客户端成功连接后,客户端才能与服务器端正常的进行信息交互。实际测试结果如下(图七)图七 客户服务器成功连接2.6.4聊天过程在聊天过程中,用户只要在客户端输入信息,点击发送,信息就会通过客户端与服务器端之间的输入输出流通道发送至服务器端,然后由服务器端发送至其余的各个客户端。在发送信息的过程中,每个客户端都会显示这条信息是哪一个客户端发送的,经过测试,延迟很低,即时性很好。实际的测试结果如下图(图八):图八 聊天过程2.6.5 断开连接服务器端与客户端之间

19、断开连接有两种方式:一是客户端主动关闭,服务器端会显示“一个客户端已退出”,这样退出不会引起其他客户端的正常聊天;二是服务器端主动关闭,这时,客户端不会显示服务器端关闭,只有在客户端发送下一条信息时,系统才会提示服务器端已经关闭,这种断开连接的方式需要尽量的避免,因为一旦服务器端关闭,各个客户端就不能继续进行信息交互。这种断开连接的方式是非法的。实际的测试结果如下图(图九):图九 客户服务器断开连接2.7课程设计小结通过这个聊天系统的设计,虽然很努力的去做,但是还是有些地方做的不好;例如:没有把客户端启动时输入昵称和服务器端IP地址的界面做成用户图形界面,使得系统的美观有所下降;另外,在服务器

20、端主动退出时,客户端不能及时的检测到服务器端的关闭,需要在发送下一条信息时才能检测到;这使得客户端一直处在阻塞状态。这个系统也有较多的亮点。例如:在建立服务器端的时候,不用建立与数据库的联系,使得服务器端的程序比较简单,通用性也更强;系统采用C/S客户服务器的模式,使得系统的吞吐量大大增加,同时,也可以接受更多的客户端连接。参考文献1 耿祥义JAVA大学实用教程实验指导.M.北京.电子工业出版社 20052 张广彬,孟红蕊,Java课程设计案例精编.M.北京.清华大学出版社 20073 黄晓东.Java课程设计案例精编(第一版).M.北京.中国水利水电出版社 20044 黄明等,梁旭,周绍斌.

21、Java课程设计.M.北京.电子工业出版社 20065 杨昭.二级Java语言程序设计教程.M.北京.中国水利水电出版社 20066 赵毅主.跨平台程序设计语言Java.M.西安. 西安电子科技大学出版社20067王路群.Java高级程序设计.M.北京. 中国水利水电出版社 2006课程设计总结经过这次课程设计,我对Java又有了一定地深入了解,这次我选的题目是局域网聊天程序的实现,涉及的编程知识不是太多,主要就是Java网络编程那一块。一开始拿到这个题目,其实并不知道如何下手,因为以前并没有做过此类的程序设计,对网络编程这一块的认识也相对较少。为了写好程序,我开始去图书馆看相关的书籍,了解到

22、利用套接字可以进行网络通讯相关的编程,知道了C/S模式下的局域网聊天程序的方式及其实现形式。知道了要建立网络通讯连接,首先服务器要创建一个服务器的套接字,然后用accept()方法等待客户端的连接,客户端也创建一个客户端套接字,并通过服务器的IP地址和端口号连接服务器,再建立连接之后,就要定义两端的输入输出流,然后依据一定的协议进行数据传输,最后要注意关闭各自的套接字。整个C/S模式的局域网通讯方式就是这样。这次我写的程序相对简单,只实现了服务器和客户端的连接通讯,老师也觉得这个程序太简单了,确实简单了些,不过我也尝试过客户端与客户端的连接,但是似乎线程这一块的程序我并没有写好,总是报错,于是

23、我变舍弃了客户端与客户端连接的实现,虽然课程设计结束了,但是我的Java之路还长,我会利用暑假时间好好补习一下,好好完善我的程序。总的来说,这次课程设计的收获还是很大的,尤其在网络编程,和线程的使用这一块,学到了很多,自己对Java的兴趣也是越开越浓,希望在今后的学习中,自己能够取得不断的进步,让自己的大学变的充实而又精彩。致谢本课题在选题及进行过程中得到高老师的悉心指导。过程中,高老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。高老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。再多华丽的言语也显苍白。在此,谨向高老师致以诚挚的谢意和崇高的敬意。

24、感谢这一段时间来所有老师对我学习上的帮助和生活上的关怀,正是您们的辛勤工作,才使我得以顺利地完成此次课程设计。浓浓师恩,终生不忘。 感谢班级里的所有同学,正是有你们的帮助才能让我更好的完成了此次课设,有你们真好,一生的友谊,永不会忘。附录1. 服务器代码package com.chat;import .*;import java.util.Vector;import java.io.*;public class ChatServer ServerSocket ss = null; boolean onStart = false; Vector clients = new Vector(); p

25、ublic static void main(String args) new ChatServer().start(); public void start() try ss = new ServerSocket(6543); onStart = true; System.out.println(服务器已成功启动!); catch(BindException e) System.out.println(端口使用中!); catch (Exception e1) e1.printStackTrace(); try while(onStart) Socket s = ss.accept(); C

26、lient c = new Client(s); clients.add(c); new Thread(c).start(); System.out.println(一个客户端成功连接!); catch(Exception e) try ss.close(); catch (IOException e1) / TODO Auto-generated catch block e1.printStackTrace(); e.printStackTrace(); class Client implements Runnable private Socket s = null; private Dat

27、aInputStream dis = null; private boolean onConnect = false; private DataOutputStream dos = null; public Client(Socket s) this.s = s; try dis = new DataInputStream(s.getInputStream(); dos = new DataOutputStream(s.getOutputStream(); onConnect = true; catch (IOException e) / TODO Auto-generated catch b

28、lock e.printStackTrace(); public void send(String str) try dos.writeUTF(str); catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); Override public void run() / TODO Auto-generated method stub String str = ; while(onConnect) try str = dis.readUTF(); System.out.println(str); fo

29、r(int i = 0;i clients.size();i +) Client c = clients.get(i); if(c.onConnect = false) clients.remove(c); else if(c != this) c.send(str); System.out.println(a massage is sended!); catch (SocketException e) / TODO Auto-generated catch block System.out.println(一个客户端已退出!); onConnect = false;/ e.printStackTrace(); catch (Exception e) try if(dis !

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1