版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
经典word整理文档,仅参考,双击此处可删除页眉页脚。本资料属于网络整理,如有侵权,请联系删除,谢谢!1.文字描述即可)该课程设计为C/S模式的聊天室,分为两个部分,一个是客户端程序,一个是服务端程序,需要先开启服务器,再开启客户端才能使用。1.1.服务端程序需要完成的一些基本功能。(1).启动服务器。(2).停止服务器。(3).退出服务器。(4).接受客户端发送过来的消息,把消息显示在服务器的文本区上。(5).可以向客户端程序发送消息。(6).实现背景色的更换。(7).帮助功能。(8).实现在线用户的统计。(9).还可以增加其他功能,比如统计在线客户的人数等。1.2.客户端程序需要完成的一些基本功能。(1).启动客户端,登录服务器。(2).退出客户端。(3).向服务器发送消息。(4).接受客户端发来的消息。(5).更好背景色。(6).帮助功能。(7).还可以增加其他的功能,比如向某个客户端发送消息进行私聊等。12.检查流程设计。类说明用表格描述即可)2.1.该聊天室功能实现的具体设计思路:聊天室分为两个部分,服务器端和客户端部分。服务器端的功能设计是先运行服务器,再启动服务器等待客户端的连接,当连接成功后通知客户端可以进行聊天。在聊天的时候可以更换背景色,可以统计在线人数。还有停止服务器和退出服务器功能。当开启服务器的停止功能后,客户端就不能进行交互。服务器端还可以增加其他的功能,比如统计客户在线人数,实现客户端之间的私聊功能等。客户端的功能设计是先运行客户端,然后登录连接服务器,当连接成功后便可以进行聊天功能。客户端还可以增加其他的功能,比如,需要客户先进行注册,注册成功后再登录连接服务器才能进行聊天功能等。2.1.1.聊天室服务器端模块主要有以下几部分组成.主框架类(MDS_ServerChat.java)该文件包含名为MDS_ServerChat的public务器的界面。添加事件侦听,事件处理。利用套接字ServerSocket和socket的对象进行消息的收发。.服务器用户上线侦听类.该类实现了RunnableRunnable类中的runrun方法中实现对服务器用户的上线侦听。.服务器的启动和发送类。该类实现了ActionListener类,重写了ActionListener类的actionPerformedactionPerformed方法中实现对服务器的启动。实现对服务器消息的发送工作。.服务器的接收类。该类实现了Runnable类,重写了Runnable类中的run方法,在run方法中实现对服务器用户消息的接收工作。32.1.2.聊天室客户端模块主要有以下几部分组成.主框架类(MDS_ClientChat.java)该文件包含名为MDS_ClientChat的public义客户端的界面。添加事件侦听,事件处理。向客户端发送消息类。该类实现了ActionListener类,重写了ActionListener类的actionPerformed方法。在actionPerformed方法中实现对客户端的启动和登录服务器及向服务器发送消息的工作。如果增加了多个客户端,还可以和其他客户端进行交互等。.客户端接收消息类。该类实现了RunnableRunnable类中的run方法来实现对服务器发过其他的客户端进行交互,实现私聊功能。52.2.主要类说明。JFrame在该程序中是MDS_ClientChat类的父类。其主要功能是定义服务器的界面。添加事件侦听,事件处理。ActionListenerActionListener接口中只有一个actionPerformed法。当发生ActionEvent事件时,监视器调用接口中的(ActionEvente)方法对发生的事件作出处理声明一个实现Runnable接口的类并实现run()方法。在调用start()将调用run()方法。run()方法中的代码定义执行线程所需的功能在套接字通信中客户端的程序使用Socket类建立与服务服务器端程序使用ServerSocket类建立接收客户套接字的服务器套接字62.3.检查流程设计。服务器已断开,请重新连接73.3.1.MDS_ServerChat.javapackageimportimportimportpublicclassMDS_ServerChatextendsJFrameimplements{privateintportprivateServerSocketserver;client;privateBufferedReadercin;privatePrintWriter;chatThread;privatep1;privateJButtonstartButton;privateJButtonstopButton;privateJButtonexitButton;privateJScrollPanescrollPanel;privateJTextAreamessage;privatep2;privateJTextFieldserverMessage;privateJButtonmessageButton;privatep3;privateJComboBox<String>combox1;privateJComboBox<String>combox2;privateJMenuBarmenubar;privateJMenumenu,;privateJMenuItemitem1item2,item3,item4,;public{super(""menubarnew8menu=JMenu("更换背景色"menu1=JMenu(""item1=JMenuItem(""item2=JMenuItem(""item3=JMenuItem(""item4=JMenuItem(""item5=JMenuItem(""menu.add(item1menu.add(item2menu.add(item3menu1.add(item4menu1.add(item5menubar.add(menumenubar.add(menu1setJMenuBar(menubaritem1.addActionListener(new{publicvoidactionPerformed(ActionEvente){message.setBackground(Color.gray}}item2.addActionListener(new{publicvoidactionPerformed(ActionEvente){message.setBackground(Color.blue}}item3.addActionListener(new{publicvoidactionPerformed(ActionEvente){message.setBackground(Color.white}}p1=newstartButton=JButton(""stopButton=JButton(""exitButton=JButton(""9startButton.addActionListener(thisstopButton.addActionListener(thisexitButton.addActionListener(thisp1.add(startButtonp1.add(stopButtonp1.add(exitButtonadd(p1,BorderLayout.NORTHmessagenewscrollPanel=JScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.RIZONTAL_SCROLLBAR_AS_NEEDEDadd(scrollPanel,BorderLayout.CENTERp2=newserverMessage=newmessageButton=newJButton(""messageButton.addActionListener(thisp2.add(serverMessagep2.add(messageButtonadd(p2,BorderLayout.SOUTHp3=newcombox1newcombox2newcombox1.addItem("----"combox1.addItem("combox1.addItem("combox1.addItem("p3.add(combox1add(p3,BorderLayout.EASTp3.setBackground(Color.graysetDefaultCloseOperation(JFrame.EXIT_ON_CLOSEsetVisible(true}publicvoidactionPerformed(ActionEvente){if(e.getSource()==startButton){p1.setBackground(Color.green10{server=newServerSocket(port}catchex){}chatThread=Thread(thischatThreadstartButton.setVisible(falsemessage.append(""+"\n"}elseif(.getSource()==stopButton){chatThread=null;startButton.setVisible(trueif(coutnull){cout.println("stop"}{if(server!=null){p1.setBackground(Color.server}}catch){}}elseif(.getSource()==exitButton){chatThread=null;if(coutnull){cout.println("exit"11}System.}elseif(.getSource()==messageButton){if(chatThread!=null){cout.println(serverMessage.getText()+"\n"message.append(":"+serverMessage.getText()+"\n"}}}{while(true){{client=ServerChatThread=ServerChatThread(=newThread(t}catchex){}}}args){MDS_ServerChatserverChat=new}classServerChatThread{client2;client){client2client;}{12while(true){{cin=newBufferedReader(newInputStreamReader(client2cout=PrintWriter(client2.getOutputStream(),trueusername=if(usernamenull){message.append("+username+""+"\n"cout.println("ok"}aline"";while(chatThread!=){aline=if(aline.equals("exit"{break;}{message.append(username+""+aline}}}catche){}}}}}3.2.MDS_ClientChat.javapackageimportimportimport13publicclassMDS_ClientChatextendsJFrameimplements{privateintportclient;privateBufferedReadercin;privatePrintWriter;chatThread;privatep1;privateusernameLabel;privateJTextFieldusername;privateJButtonloginButton;privateJButtonexitButton;privateJScrollPanescrollPanel;privateJTextAreamessage;privatep2;privateJTextFieldclientMessage;privateJButtonclientButton;privateJMenuBarmenubar;privateJMenumenu,;privateJMenuItemitem1item2,item3,item4,;public{super(""menubarnewmenu=JMenu("更换背景色"menu1=JMenu(""item1=JMenuItem(""item2=JMenuItem(""item3=JMenuItem(""item4=JMenuItem(""item5=JMenuItem(""menu.add(item1menu.add(item2menu.add(item3menu1.add(item4menu1.add(item5menubar.add(menu14menubar.add(menu1setJMenuBar(menubaritem1.addActionListener(new{publicvoidactionPerformed(ActionEvente){message.setBackground(Color.gray}}item2.addActionListener(new{publicvoidactionPerformed(ActionEvente){message.setBackground(Color.blue}}item3.addActionListener(new{publicvoidactionPerformed(ActionEvente){message.setBackground(Color.white}}p1=newusernameLabel=newJLabel(""username=newloginButton=JButton(""exitButton=JButton(""loginButton.addActionListener(thisexitButton.addActionListener(thisp1.add(usernameLabelp1.add(usernamep1.add(loginButtonp1.add(exitButtonadd(p1,BorderLayout.NORTHmessagenewscrollPanel=JScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.15RIZONTAL_SCROLLBAR_AS_NEEDEDadd(scrollPanel,BorderLayout.CENTERp2=newclientMessage=newclientButtonnewJButton(""clientButton.addActionListener(thisp2.add(clientMessagep2.add(clientButtonadd(p2,BorderLayout.SOUTHsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSEsetVisible(true}publicvoidactionPerformed(ActionEvente){if(e.getSource()==loginButton){if(loginServer(username{p1.setBackground(Color.greenchatThread=Thread(thischatThread}}elseif(.getSource()==exitButton){chatThread=null;if(coutnull){cout.println("exit"}System.}elseif(.getSource()==clientButton){if(chatThread!=null){cout.println(clientMessagemessage.append(username.getText()+""+clientMessage.getText()+"\n"}16}}publicbooleanusername){{client=Socket("localhost"portcin=newBuffe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度办公家具定制与安装合同范本2篇
- 二零二五年度2025版物流运输劳务协议范本2篇
- 2024年蔬菜水果批发市场广告位租赁合同3篇
- 2024年长期物流合作标准协议版B版
- 2025年度技术进口与许可协议3篇
- 二零二五年度住宅小区地下车库改造工程履约担保合同3篇
- 2024年能源开发与电力供应合同
- 二零二五年度体育赛事策划与运营合同3篇
- 2024年精简版二手车买卖合同书版
- 2024年版建筑项目消防安全管理合同版B版
- 大庆市2025届高三年级第二次教学质量检测(二模)政治试卷(含答案)
- 2025年内蒙古阿拉善额济纳旗事业单位引进48人历年高频重点提升(共500题)附带答案详解
- 2025年内江资中县融媒体中心招考聘用新媒体工作人员3人高频重点提升(共500题)附带答案详解
- 装修材料合同范例
- 【7地RJ期末】安徽省合肥市庐江县2023-2024学年七年级上学期期末地理试题(含解析)
- 共用线路三方协议合同范例
- 战略规划的关键要点
- 社会工作服务质量保障措施
- 雅礼中学2024-2025学年初三创新人才选拔数学试题及答案
- 冬季高空作业施工方案
- 山西云时代技术有限公司招聘笔试题目
评论
0/150
提交评论