当前位置:文档之家› java课程设计-聊天程序解析

java课程设计-聊天程序解析

攀枝花学院Java程序设计课程设计题目:聊天程序学生姓名: Puter学号: 201310803036所在院(系):数学与计算机学院专业:网络工程班级: 2013级网本指导教师:吴建斌职称:导师2014 年12 月31 日攀枝花学院本科学生课程设计任务书题目聊天程序1、课程设计的目的通过本课程设计使学生能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。

2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)该程序实现聊天功能,包括服务器段程序和客户端程序。

要求:(1)客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的消息。

(2)服务器端程序:可将消息发送到客户端和接受客户端发送来的消息。

3、主要参考文献[1]朱福喜.《Java语言程序设计》(第二版).科学出版社[2]陈国君等.《Java程序设计基础》(第二版).清华大学出版社[3] Deitel.《Java大学基础教程》(第六版).电子工业出版社[4] MaryCampione.《Java语言导学》(第四版).机械工业出版社[5] Y.Daniel Liang.《Java语言程序设计基础篇》(第六版). 机械工业出版社[6] Kathy Sierra.《Head First Java》(第二版).东南大学出版社4、课程设计工作进度计划序号时间(天)内容安排备注1 1 分析设计准备周一2 2 编程调试阶段周二至周三3 1 编写课程设计报告周四4 1 考核周五总计5(天)指导教师(签字)日期年月日教研室意见:年月日学生(签字):接受任务时间:年月日注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表题目名称聊天程序评分项目分值得分评价内涵工作表现20% 01 学习态度 6 遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。

02 科学实践、调研7 通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。

03 课题工作量7 按期圆满完成规定的任务,工作量饱满。

能力水平35% 04 综合运用知识的能力10能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。

05 应用文献的能力 5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。

06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。

07 计算及计算机应用能力 5 具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。

08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10 具有较强的数据收集、分析、处理、综合的能力。

成果质量45% 09插图(或图纸)质量、篇幅、设计(论文)规范化程度5 符合本专业相关规范或规定要求;规范化符合本文件第五条要求。

10 设计说明书(论文)质量30 综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。

11 创新10 对前人工作有改进或突破,或有独特见解。

成绩指导教师评语指导教师签名:年月日目录摘要 (1)一、需求分析 (1)二、概要设计 (3)三、详细设计 (4)四、调试分析 (4)五、结论 (14)六、实验分工 (14)七、参考文献 (14)摘要在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。

基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。

一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Soket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。

现在的各种聊天工具功能越来越强大,但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。

为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。

本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。

建立在JA V A平台上,系统的设计使用了面向对象技术和面向对象的设计原则。

系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。

使用JA V A语言编写,开发工具采用Eclipse。

服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。

大大增强了程序对服务器资源的利用。

聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。

关键词:多线程;客户机/服务器;JA V A ; Socket ; Eclipse ; TCP/IP一、需求分析为了更好的掌握java这门课程的内容,同时更好的理解与掌握socket编程,对所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,掌握Java语言编程技巧。

要求使用图形用户界面。

能实现一个聊天室中多人聊天。

可以两人私聊。

(提示:使用socket通信)程序描述清晰准确,思路清晰,程序能够实现相应的功能。

聊天时系统是通过即时通讯技术来实现在线聊天、交流的软件。

目前有2种架构形式,1、一种是C/S架构,采用客户端/服务器形式,用户使用过程中需要下载安装客户端软件,典型的代表有:QQ、百度HI 、Skype QQ VS GU、Gtalk、新浪UC、MSN等;2、采用B/S架构,即浏览器/服务端形式,这种形式的即时通讯软件,直接借助互联网为媒介、客户端无需安装任何软件,既可以体验服务器端进行沟通对话,一般运用在电子商务网站的服务商,典型的代表有Websitelive 、53KF、live800等二、概要设计目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为Live Messenger)以及跨平台Gaim等。

本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。

腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。

腾讯的成功与其对QQ的不断创新和完善是分不开的。

参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。

可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。

并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。

其模型如图1-1图1.1三、详细设计通过TCP网络编程,主要编写有客户端与服务器端两个部分,服务器端通过循环一直从客户端接收信息,并通过线程实现多个客户端连接。

服务器发送信息则通过定义链表保存客户端信息。

每个客户端向服务器发送信息时,则通过链表中的所有客户端的连接而发送信息给所有客户端界面从而实现局域网内多人聊天。

而客户端则主要是界面的编写,通过一个线程一直从服务器获取信息,如果不为空时就在界面上显示。

四、调试分析1、首先运行服务器如图1.2:图1.2分析:服务器进入阻塞状态。

等待连接。

主要代码:package .server;import java.io.IOException;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.List;import .server.thread.ThreadServer;public class Server { //服务器功能实现private ServerSocket server = null ;public static List<Socket> list = new ArrayList<Socket>() ;//定义链表储存客户信息private Socket client = null ;private int count = 0 ;public Server(){try {server = new ServerSocket(8888) ; //创建服务器} catch (IOException e1) {e1.printStackTrace();}System.out.println("等待服务器被连接······");boolean flag = true ;while(flag){synchronized(this){try {client = server.accept() ;count++; //记录客户连接数目} catch (IOException e1) {e1.printStackTrace();}list.add(client) ;System.out.println("第"+count+"客户端被连接!");try {new Thread(new ThreadServer(client)).start();//定义线程,实现多个客户端连接} catch (Exception e) {e.printStackTrace();flag = false ;}}}try {server.close();} catch (IOException e) {e.printStackTrace();}}}package .server.thread;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintStream;import .Socket;import java.util.Iterator;import .server.util.ListCO;public class ThreadServer implements Runnable{ /定义线程,实现多个客户端连接private BufferedReader buf = null ;private Socket client = null ;public ThreadServer(Socket client) throws Exception{this.client = client ;buf=new BufferedReader(new InputStreamReader(this.client.getInputStream())) ; //连接从客户端获取信息}@Overridepublic void run(){ //线程String str = null ;boolean f = true ;while(f){ //一直与连接的客户端通讯try {str = buf.readLine() ;} catch (Exception e) {f = false ;}if("bye".equals(str)){f = false ;}else{ListCO lout = null ;try {lout = new ListCO();} catch (Exception e) {e.printStackTrace();}Iterator<PrintStream> iter = lout.getLout().iterator();//向所有的客户端发送信息while(iter.hasNext()){PrintStream o = iter.next() ;o.println(str);}}}}}package .server.util;import java.io.PrintStream;import .Socket;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import .server.Server;public class ListCO { //保存客户端的连接private List<Socket> list = null ; //通过链表保存private List<PrintStream> lout = null ;public ListCO() throws Exception{this.list = Server.list ;lout = new ArrayList<PrintStream>() ;Iterator<Socket> ilist = list.iterator() ;while(ilist.hasNext()){PrintStream out = null ;Socket c = ilist.next() ;out = new PrintStream(c.getOutputStream()) ;lout.add(out) ;}}public List<PrintStream> getLout() {return lout;}public void setLout(List<PrintStream> lout) {this.lout = lout;}}2、客户端的启动如图1.3、图1.4:分析:登录界面先设置聊天使用的名字图1.4分析:启动时先输入聊天姓名,然后才进入聊天,这样就可以进行多人聊天了。

相关主题