ImageVerifierCode 换一换
格式:DOC , 页数:26 ,大小:612.04KB ,
资源ID:2492346      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(java—课程设计报告聊天小程序.doc)为本站上传会员【快乐****生活】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

java—课程设计报告聊天小程序.doc

1、课程设计说明书课程名称: Java程序设计 专 业: 班级: 设 计 人: 2015年 1月 14 日 课 程 设 计 任 务 书一、课程设计题目: 聊天小程序 二、设计原始资料:1、雍俊海,Java程序设计教程,清华大学出版社,2007; 2、耿祥义,张跃平,Java 2 实用教程,清华大学出版社; 3、张跃平,耿祥义,Java 2 实验指导,清华大学出版社; 三、设计应解决下列各主要问题: 1、用图形用户界面;(使用socket通信) 2、能实现一个聊天室中的多人聊天; 3、可以实现两个私聊; 四、设计说明书应附有下列图纸:运行结果截图 五、小组分工说明: 六、命题发出日期:2014.12

2、.29设计完成日期: 2015.1.14指导教师评语成绩: 指导教师(签章):年月日山东科技大学学生课程设计目 录1 需求分析说明 11.1背景11.2 功能要求11.3 运行环境11.4 功能实现12 概要设计说明22.1 模块调用图22.2 套接字连接示意图22.3 主要函数声明23 详细设计说明43.1功能描述43.2 主要功能详述43.3 主要代码分析54 调试分析94.1遇到的问题94.2 测试结果分析105 用户使用说明106 课程设计总结127 附录131 需求分析说明1.1 背景在当今的信息时代,越来越多的聊天工具被应用,Java语言是当今流行的网络编程语言,它具有面向对象、与

3、平台无关、安全、多线程等特点。此课程设计 的题目是聊天小程序,巩固所学的Java语言基本知识,增进Java语言编辑基本功,拓宽常用类库的应用。使我们把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法。1.2 功能要求1、使用图形用户界面。2、能实现一个聊天室中多人聊天。3、可以两人私聊。1.3 运行环境本程序基于Java和Eclipse开发环境,可以在一般的装有Windows系统的主机上运行。1.4 功能实现程序实现了聊天室的基本功能,其中有:1、 启动服务器。2、 进入客户端界面。3、 登录聊天室。4、 发送信息。5、 关闭服务器。6、 输入昵称。7、

4、发送消息并收到其他客户的消息。2 概要设计说明2.1 模块调用图2.2 套接字连接示意图2.3 主要函数声明1、Socket的构造方法如下: Socket(String host,int port) 参数host是服务器的IP地址,port是一个端口号。2、ServerSocket的构造方法如下: ServerSocket(int port) port是一个端口号。port必须和客户呼叫的端口号相同3、 当建立时可能发生IOException异常,因此应像下面那样建立到服务器的套接字连接:TrySocket myscoket=new Socket(“http:/192.168.0.78”,18

5、80);Catch(IOException e)4、 当建立服务器时可能发生IOException异常,因此,应像下面那样建立接收客户的服务器套接字:TryServerSocket server_scoket=new ServerSocket(1880);Catch(IOException e)比如1880端口已被占用时,就会发生IOException异常。5、 当服务器的ServerScoket对象server_socket建立后,就可以使用accept()方法接收客户的套接字连接呼叫,代码如下:Server_socket.accept();6、 客户使用Socket类不带参数的构造方法So

6、cket()创建一个套接字对象,该对象需调用Public void connect(SocketAddress endpoint) throws IOException 请求和参数SocketAddress指定地址的套接字建立连接,为了使用connect方法,可以使用SocketAddress的子类InetSocketAddress建立一个对象,InetSocketAddress的构造方法如下:Public InetSocketAddress(InetAddress addr,int port)3 详细设计说明3.1 功能描述聊天程序分为服务器端和客户端两部分,服务端程序主要负责侦听客户端发来

7、的消息,客户端需要登陆到服务器端才可以实现正常的聊天功能。服务器:1、 在特定端口上进行侦听,等待客户端连接。2、 向已经连接到服务器端的 用户发送系统消息。3、 当停止服务时,断开所有的用户连接。4、 系统运行稳定、安全可靠。客户端:1、 连接到已经开启聊天服务的服务器端。2、 当服务器端开启后,用户可以发表聊天信息。3、 用户可以向所有人发送消息。4、 系统运行稳定、安全可靠。3.2 主要功能详述3.2.1 客户建立连接到服务器的套接字对象1、当套接字连接mysocket建立后,可以想象一条通信“线路”已经建立起来。mysocket可以使用getInputStream()方法获得一个输入流

8、,然后用这个输入流读取服务器放入“线路”的信息。mysocket还可以使用getOutputStream()方法获得一个输出流,然后用这个输出流将信息写入“线路”。2、在实际编写程序时,把mysocket使用getInputStream()方法获得的输入流接到另一个数据流上,然后就可以从这个数据流读取服务器来的信息,之所以这样是因为后面DataInputStream流有更好的从流中读取信息的方法。3、同样把mysocket使用getOutputStream()方法得到的输出流接到另一个DataOutputStream数据流上,然后向这个数据流写入信息,发送给服务器端,之所以这样做也是因为后面的

9、DataOutputStream流有更好的向流中写入信息的方法。 3.2.2 ServerSocket类1、客户负责建立客户到服务器的套接字连接,即客户负责呼叫。因此服务器必须建立一个等待接收客户的套接字的ServerSocket对象。ServerSocket的构造方法如下: ServerSocket(int port) port是一个端口号。port必须和客户呼叫的端口号相同2、所谓接收客户的套接字连接就是accept()方法会返回一个和客户端Socket对象相连接的Socket对象,服务器端的这个Socket对象sc使用getOutputStream()方法获得的输出流将指向客户端Sock

10、et对象myscoket使用getInputStream()方法获得的那个输入流;同样,服务器端的这个Socket对象sc使用使用的 getInputStream()方法获得的输入流将指向客户端Socket对象myscoket使用getOutputStream()方法获得的那个输出流 。3、连接建立以后,服务器端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有客户端的IP地址和域名。同样,客户端的套接字对象调用getInetAddress()方法可以获取一个InetAddress对象,该对象含有服务器端的IP地址和域名。 双方通信完毕后,应

11、使用close()方法关闭套接字连接。3.2.3 把套接字连接放在一个线程里需要注意的是,从套接字连接中读取数据与从文件中读取数据有很大的不同。尽管两者都是输入流,但从文件中读取数据时,所有的数据都已经在文件上了,而使用套接字连接时,可能在另一端数据发送出来之前,就已经开始试着读取了,这时,就会堵塞本线程,直到该读取方法成功读取信息,本线程才继续执行后续的操作。因此,服务器端收到一个客户的套接字后,就应该启动专门为该客户服务的线程。3.3 主要代码分析3.3.1 使用套接字实现的主要方法 服务器为每个客户启动一个线程,在该线程中通过套接字和客户交流信息。当向服务器发送一条聊天信息时,服务器要让

12、所有的这些线程中的输出流写入信息,这样所有的客户的套接字的输入流就读取到了这一条信息。如果想把信息送给特定的用户,服务器就让特定的线程中的输出流写入信息,那么只有特定的客户的套接字的输入流可以读取到这条信息。3.3.2 客户端 public void actionPerformed(ActionEvent e) if(e.getSource()=connection)/连接服务器 try if(socket.isConnected() else InetAddress address=InetAddress.getByName(127.0.0.1);/传递域名 InetSocketAddres

13、s socketAddress=new InetSocketAddress(address,666); socket.connect(socketAddress); in =new DataInputStream(socket.getInputStream(); out = new DataOutputStream(socket.getOutputStream(); name=inputName.getText(); out.writeUTF(姓名:+name); send.setEnabled(true); if(!(thread.isAlive() thread=new Thread(th

14、is); thread.start();/启动线程,新建状态到就绪队列排队 catch (IOException ee) if(e.getSource()=send)/发送内容 String s=inputContent.getText(); if(s!=null) try out.writeUTF(聊天内容:+name+:+s); catch(IOException e1) public void run()/线程对象调度之后所执行的操作 String s=null; while(true) try s=in.readUTF();/读取服务器发来的消息,堵塞状态 chatResult.app

15、end(n+s); catch(IOException e) chatResult.setText(与服务器已断开); try socket.close(); catch(Exception exp) break; 3.3.3 服务器端public class ChatServer public static void main(String args) ServerSocket server=null;/等待接收客户的套接字的ServerSocket对象 Socket you=null; Hashtable peopleList; peopleList=new Hashtable(); wh

16、ile(true) try server=new ServerSocket(666);/端口号 catch(IOException e1) System.out.println(正在监听); try you=server.accept();/接收客户的套接字连接呼叫 InetAddress address=you.getInetAddress(); System.out.println(客户的IP:+address); catch (IOException e) if(you!=null) Server_thread peopleThread=new Server_thread(you,peo

17、pleList); peopleThread.start(); /客户线程 else continue; class Server_thread extends Thread/服务线程 String name=null; Socket socket=null; File file=null; DataOutputStream out=null; DataInputStream in=null; Hashtable peopleList=null; Server_thread(Socket t,Hashtable list)/构造 peopleList=list; socket=t; try i

18、n=new DataInputStream(socket.getInputStream(); out=new DataOutputStream(socket.getOutputStream(); catch (IOException e) 4 调试分析4.1 遇到的问题1、 图形用户界面设计按钮和文本框设计中的按钮上的事件处理问题。解决:通过java程序设计教程中的事件和事件处理知道了具体事件的处理是使用事件对应的监听者接口中所提供的抽象方法,这些方法需要重新定义,例如本程序中的public void actionPerformed(ActionEvent e),该方法用来对发生在按钮上事件的

19、处理。2、 输入流和输出流的问题。解决:InputStreamReader缓冲处理流通信双方需要建立Socket连接,本程序中Socket包含两个流一个输出流向外发送数据,一个输入流接收数据。3、 监听端口的问题。解决:通过Socket应用方面的知识知道了监听端口是引用Socket构造方法,指定了服务器程序中其监听的端口,还需抛出异常。4.2 测试结果分析本次设计在调试过程中出现了许多问题,其中,最为严重的错误就是在最初的程序中,并没有将异常处理加入到程序中去,所以在程序运行时出现了许多错误,后来经过同学的帮助和查阅资料,我将异常处理加入到了代码中,也就没有大的问题。异常处理对程序是很重要的,

20、加入异常处理有益于我们找到自己的错误,同时异常处理也能够将语句使用程序处理错误的能力,有效的提高了我们完成程序的效率。5 用户使用说明1、 首先运行服务器端,正在监听。2、 运行客户端,输入昵称,并连接服务器,并发送消息。3、 运行多个客户端,实现群聊。6 课程设计总结这次课程设计经过不懈的努力,从对整个实现的功能的设计,编写代码,还有调试分析与完善设计,经过了很长一段时间才实现了程序基本满足聊天的需要。通过这次课程设计,增强了动手能力和解决实际问题的能力,再次之前,对Java编程技术和网络Socket编程知识都只是略知皮毛,缺乏深入的认识,对其工作方式和原理缺乏透彻的认识。在这段期间里,我认

21、真学习了Java语言的开发、Applet小程序的实现、异常处理,对编程思想有了进一步的体会,程序虽然完成,但是还存在许多缺点,比如没有列出上线客户、界面虽然简洁但是不太美观,由于时间和掌握的知识的问题只实现了群聊,对私聊的功能没有实现,这个部分在今后我会继续完善,希望自己在不断学习和实践中收获到更多。7 附录/ChatServer.javaimport java.io.*;import .*;import java.util.*;public class ChatServer public static void main(String args) ServerSocket server=nu

22、ll; Socket you=null; Hashtable peopleList; peopleList=new Hashtable(); while(true) try server=new ServerSocket(666); catch(IOException e1) System.out.println(正在监听); try you=server.accept(); InetAddress address=you.getInetAddress(); System.out.println(客户的IP:+address); catch (IOException e) if(you!=nu

23、ll) Server_thread peopleThread=new Server_thread(you,peopleList); peopleThread.start(); else continue; class Server_thread extends Thread String name=null; Socket socket=null; File file=null; DataOutputStream out=null; DataInputStream in=null; Hashtable peopleList=null; Server_thread(Socket t,Hashta

24、ble list) peopleList=list; socket=t; try in=new DataInputStream(socket.getInputStream(); out=new DataOutputStream(socket.getOutputStream(); catch (IOException e) public void run() while(true) String s=null; try s=in.readUTF(); /in读取客户放进“线路”里的信息,堵塞状态 if(s.startsWith(姓名:) name=s; boolean boo=peopleLis

25、t.containsKey(name); if(boo=false) peopleList.put(name,this); else out.writeUTF(请换昵称:); socket.close(); break; else if(s.startsWith(聊天内容) String message=s.substring(s.indexOf(:)+1); Enumeration chatPersonList=peopleList.elements(); while(chatPersonList.hasMoreElements() (Server_thread)chatPersonList

26、.nextElement().out.writeUTF(聊天内容:+message); catch(IOException ee) Enumeration chatPersonList=peopleList.elements(); while(chatPersonList.hasMoreElements() try Server_thread th=(Server_thread)chatPersonList.nextElement(); if(th!=this&th.isAlive() th.out.writeUTF(客户离线:+name); catch(IOException eee) pe

27、opleList.remove(name); try socket.close(); catch(IOException eee) System.out.println(name+客户离开了); break; /Client.javaimport .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class Client public static void main(String args) new ChatClient(); class ChatClient

28、extends Frame implements Runnable,ActionListener Button connection,send; TextField inputName,inputContent; TextArea chatResult; Socket socket=null; DataInputStream in=null; DataOutputStream out=null; Thread thread; String name=; public ChatClient () socket=new Socket(); Box box1=Box.createHorizontal

29、Box(); connection=new Button(Connect To Server); send=new Button(Send); send.setEnabled(false); inputName=new TextField(6); inputContent=new TextField(22); chatResult=new TextArea(); box1.add(new Label(Input Nickname); box1.add(inputName); box1.add(connection); Box box2=Box.createHorizontalBox(); bo

30、x2.add(new Label(Edit); box2.add(inputContent); box2.add(send); connection.addActionListener(this); send.addActionListener(this); thread=new Thread(this); add(box1,BorderLayout.NORTH); add(box2,BorderLayout.SOUTH); add(chatResult,BorderLayout.CENTER); setBounds(10,30,400,280); setVisible(true); vali

31、date(); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); public void actionPerformed(ActionEvent e) if(e.getSource()=connection) try if(socket.isConnected() else InetAddress address=InetAddress.getByName(127.0.0.1); InetSocketAddress socketAddress=new InetSocketAddress(address,666); socket.connect(socketAddress); in =new DataInputStream(socket.getInputStream(); out = new DataOutputStream(socket.getOutputStream(); name=inputName.getText(); out.writeUTF(姓名:+name); send.setEnabled(true); if(!(thread.isAlive()

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服