java实现聊天系统.docx

上传人:scccc 文档编号:13564799 上传时间:2022-01-16 格式:DOCX 页数:18 大小:146.27KB
返回 下载 相关 举报
java实现聊天系统.docx_第1页
第1页 / 共18页
java实现聊天系统.docx_第2页
第2页 / 共18页
java实现聊天系统.docx_第3页
第3页 / 共18页
java实现聊天系统.docx_第4页
第4页 / 共18页
java实现聊天系统.docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《java实现聊天系统.docx》由会员分享,可在线阅读,更多相关《java实现聊天系统.docx(18页珍藏版)》请在三一文库上搜索。

1、计算机网络课程设计报告学生姓名学号班级指导教师设计时间目录第一章系统描述设计目的 3系统设计任务 3系统设计分析 3系统功能分析 4第二章功能模块结构模块划分 5模块结构图 5模块功能 5第三章模块算法实现服务器实现 6客户端实现 9第四章运行结果 13第五章课程设计总结 17第六章附录参考文献 19源代码 19第一章系统描述设计目的1 .学习网络编程的知识,掌握网络编程的方法。2 .进一步掌握编程思想与编程技巧,做到模块化程序设计,3 .强化语言学习,尤其是Java的图形界面与多线程,需反复练习,熟练 掌握。系统设计任务聊天室软件的设计与开发:基本要求可以完成群聊、私人聊天,实时发送和 显示

2、聊天信息,完成好友列表;进一步要求带表情,附件发送,聊天信息的加密 传送,设置黑名单等。学习通信编程Socket接口编程,使用TCP或UD脸口完成信息传送,利用 多线程技术实现服务器端的多个TCP!接的建立。系统设计分析一 .实现网络聊天室编程,关键在于Socket通信,程序的功能都是在Socket 的基础上一层一层增加的。实现 Socket通信的基本方法为以下4个步骤。(1) 在客户端与服务器端创建相应的 ServerSockot/Socket 实例。(2)打开连接到Socket的输入输出流(3)利用输入输出流,按照一定的协议(TCPB议)对Socket进行读写 操作(4)关闭输入输出流和S

3、ocket我们要实现的功能都是在第3步对Socket的输入输出流做相应的操作二.因为是多客户端,所以必须用线程进行控制,不同的处理线程为不同的客 户服务,主线程只负责循环等待,处理线程负责网络连接,接受客户输入的信息 再做相应的处理。系统功能分析本系统可以通过网络进行聊天,采用客户端服务器模式,所以程序简介 清晰易懂,而且用户都是在客户端进行活动,方便对用户的管理,也使得程 序运行与差错简单起来。采用了多线程技术,可以做到多人同时在线,提高 了系统的性能,增强了系统的实用性。有简单的客户端界面,方便用户使用 采用的是TCP议,这是可靠的,稳定的协议,这样不会丢失任何包,也就 不会丢失任何信息。

4、本系统实现的功能有:1 .用户名字登录2 .用户之间的群聊3 .用户之间的私聊4 .动态刷新并显小好友列表5 .显示在线人数6 .服务器可以显示用户在线状态7 .能够退出处理8 .用户上下线提醒第二章功能模块结构模块划分服务器:Server类模块,ServerHanderson模块sendallclient 模块,sendclientlist模块客户端:Client类模块,ServiceFrame 窗口界面模块模块功能服务器:1. Server类模块:与客户端建立连接,通过套接字获得名字,在控制端 显示提示信息2. ServerHander模块:提供线程管理,实现多用户的管理。针对每一个 用户

5、发过来的消息,进行相应处理,再转发给客户。3. Sendallclient 模块:给每个用户发送消息。4. Sendclientlist 模块:每当有用户上线,更新每个用户的用户列表。客户端:1. Client类模块:与服务端建立连接,用户登录,实现消息的群聊,私 聊,用户列表的更新等功能。2. ServiceFrame窗口界面模块:客户端窗口界面,实现用户友好,方便用户使用,在窗口上有消息显示,用户列表,在线人数等视图信息。第三章模块算法实现服务器实现1. Server类模块:创建ServerSocket,在指定端口监听,当有用户登录, 接受套接字输入流,显示其登录信息,调用 ServerH

6、ander线程进行管理。 public Server( int port) throws IOException ServerSocket server= newServerSocket(port); while (true )Socket conn=();Sendallclient 模块:把 msg消息发送给每一个用户。其中allclients 是ServerHander的枚举类型,可以指向每一个 用户。 protected static void sendallclient(String msg) synchronized ( clientlist ) Enumeration allcli

7、ents=(); while () ServerHander serh=(ServerHander)(); try catch (IOException exc) (); 模块:更新用户列表,当有新用户上线时,对以前的用户的好友列表,加上这 个新用户名字,对于这个新用户,加上所有用户的名字。实现方法是在名字信息 后面加上“ $”关键字,这样客户端接收到这个关键字时,做相应处理。public static synchronized void sendclientlist()for (int j=0;j();j+) 务器控制台显示ServerHander allclients1=(j);if (j

8、=()-1)rim();并记录登录,退出信息。bervtr IJjvjApplication U;yog炉m 卬气,slip6如ClierttLp:/127.0.0.1)!Clientfip:/127.0.9.1)ESI匚 liunt(ip:2九目.1)王五善 YClient (ip: /127.0.0.errormnt(lp: /137- 0.0.1 )A M!errorClientfip: /127力.酊1)王五浴取Client Java Application D:Program Files司重上一J净于二2 .在客户端控制台输入名字进入聊天室Client Java Applicatio

9、n D:Program Fi三黠Af看学2=-3 .聊天界面显示客户端名字,好友列表,在线人数等信息国宁翔的客户黄c亘区翔三四五六六五宁张李王越越王-2 -J2 45上上上上上-宁翔对所有人 说:大冢好,我是宁翔发送在线人数:34 .私聊,群聊显示,若选择所有人则为群聊,选择某一个人,则为私聊。如下图,群聊消息,在所有客户端都显示,私聊信息只会在发送者与接受者中显 示。亘回叵宁理的客户方上上上上翔三四五宁张李王一赵六一王五-宁翔-宁翔-宁翔下线下线对所有人对张三对李四说:大冢好,我是宁翔说:张三,你好说:李四,你好发法在线人数:3:圉张三的春白乒-张三上线李四上线-王五上线-赵六上线一赵六下线

10、-王五下线-宁翔对所有人 说.大家好,我是宁翔-宁翔时眯三说:眯三,你好所有人发诲在线人熟:35.人数动态刷新国1U PG ibh?Pr-J=-q- J I、-4 一 .1 一L NN空1 kE 上上上上上桢橙 翔三四五六六五期ffl翔喜 于张挛王甑曲王宁宁宁白 _对所有人说大冢好,我是宁到 对我三说:张三,你拧 对李四说:李四,你好上线李四在线人数固膑送第五章课程设计总结从收到题目的茫然无措,不知从何下手,到最后交出的成果,真的让我 学到了很多,可能比一学期的 JAVA和网络课程设计中学到的关于 TCPB议的知 识还要多,所以很感谢这次课程设计,有效果也很有意义,某种程度上比上课效 果还好。

11、说说完成课程设计的整个过程吧。刚看到可以选择的六个题目时,犹如 晴天霹雳,别说用代码实现了,连题目要求都不理解,上课恍惚听老师提到过这 个知识点,可是重要的内容却一点也不知道,而且,由于要做图形界面,所以用 JAVA会更简单点,但JAVA也忘得差不多了,所以只能从头来过,刚开始的3周, 一点有关课程设计的代码都没写,拿着一本从零开始学 JAVA把JAVA基础知 识,尤其是关于网络编程,线程,图形界面的知识,狠狠地补了一把,终于更看 懂一些程序结构清晰,没有反射,泛型等高端用法的程序了。在这过程中发现, 做一个普通的网络聊天室,似乎不要用太多网络知识,懂得Socokt和TCP的使用即可,于是开始

12、慢慢敲代码了。先把服务器与客户端搭建起来,只能实现连接上的作用,但什么功能都 没有,那时,以为能连接上了,那实现一些私聊,群聊的功能应该很简单,但现 实确是,只能脑中想象,真的用代码实现,却总是错误百出,做的心灰意冷,尤 其是私聊功能的实现,刚开始,想让服务器直接向接受者与发送者发送消息,但总是不如人意,折腾了大概一星期,才意识到TCP议就是用自己定义的一些规 则,在服务器与客户端之间传递消息,可以添加关键字,再解析。于是才解决私 聊问题,然后添加好友列表与更新好友的功能也在跌跌撞撞中实现了。窗口的布局,刚开始想用网格包布局,但用的很不熟练,导致布局不理想,无奈,只能用 最基本的布局了,所以界

13、面看上去很普通。想发送图片,却发现文本区域根本不 能显示图片,能用JEditorPane实现,但有BUG不知如何调试,书上,网上也 没找到能解决的办法,只能放弃了。课程设计在这种不断学习与摸索中差不多完成了,说说这次课程设计的 不足吧。1. 学过的知识不牢固,所以花费了大量时间用来学习基础知识,那些应该在以前就掌握的。2. 程序界面很普通,像老师说的一样,是最最古老的聊天系统,没有什么花哨。3. 没能实现附加功能,像加密传输,文件传送等功能。其实,挺遗憾的,因为以前选修过密码学,应该能够实现简单的DE劭口密的。4. 没有用到JDBC把用户信息存储到数据库表中,实行账号密码登录, 提高系统的安全

14、性。做了这么多的课程设计,最大的体会就是用心去做,用心去学,你一定能 学到很多知识,而且这是对学过的知识的应用,所以比单一的上课更有意思。对于自己能独立的完成课程设计,还是颇为满意的,至少努力没有白费,学到的知识也非常多,最重要的应该是理解了 TCP议的原理,并学会了简单的 应用,JAVA编程水平得到了一定的提高,面向对象的思想比以往更清晰了。第六章附录参考文献从零开始学JAVA 王发波 中国铁道出版社Java 2实用教程 耿祥文清华大学出版社源代码服务器代码:package service;import .*;import .*;import .*;public class Server p

15、ublic Server( int port)throws IOExceptionServerSocket server=newServerSocket(port);while (true ) Socket conn=();import .*;import .*;import .*;public class Client public ServiceFrame sf ;private Socket csocket ;private DataInputStream in ;private DataOutputStream out;public static void main(String 口a

16、rgs)BufferedReader in = new BufferedReader( new InputStreamReader);请输入一个名字:);String who= ; try who=().trim();/控制台获得名字catch (IOException e) ();new Client(who, ,9992);public Client(String who,String server,int port)sf=new ServiceFrame(who+ 的客户端);String str1 = null ;ActListener( this , sf);(new ExitLis

17、tener( this );try csocket = new Socket(server,port);in =new DataInputStream( new BufferedInputStream();out =new DataOutputStream( new BufferedOutputStream(); (who);();/名字发给服务器while (true )str1 =(); 重点! !,服务器端发来的消息if ($)/若以$结尾,则增添用户int index = ($);String str2 = (0,index);else if ()/以吉尾为私聊信息str1=(0,()

18、-1); if (who) -+str1+ n); else if (下线”)/用户下线,删除此用户int index =(下线); String str2 = (0,index);+str1+ n);在线人数:+ /动态更新在线人数catch (Exception e)Server Error );();(0);protected void send(String msg)/发送消息给服务器的方法try (msg);();catch (Exception e)protected void close() try ();();();(); catch (IOException ex)class

19、 ServiceFrame extends FrameJTextArea showATJTextField sendFD;JComboBox friendlist ;JButton but;JLabel showCount;JScrollPane textAreaScrollPane ;JPanel textFieldPanel = new JPanel();public ServiceFrame (String winname) super (winname);/继承父类的名字setSize(500,400);(new FlowLayout(0,10,10);showAT = new JTe

20、xtArea(400,400);(false );textAreaScrollPane = new JScrollPane( showAT);add( textAreaScrollPane ,; add( textFieldPanel ,;friendlist = new JComboBox();(所有人);(friendlist );sendFD = new JTextField(20);(sendFD);but = new JButton(发送); ;(but);showCount = new JLabel(在线人数:1);(showCount);show()-class ActListe

21、ner implements ActionListenerClient client ;ServiceFrame sframe ;public ActListener(Client c,ServiceFrame sf) client =c;sframe =sf;public void actionPerformed(ActionEvent e)/ 发送信息,并以 画为私聊标记+);class ExitListener extends WindowAdapterClient client ;public ExitListener(Client c) client =c;public void windowClosing(WindowEvent e)();(0);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1