java课程设计 局域网聊天程序.doc_第1页
java课程设计 局域网聊天程序.doc_第2页
java课程设计 局域网聊天程序.doc_第3页
java课程设计 局域网聊天程序.doc_第4页
java课程设计 局域网聊天程序.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 面向对象课程设计 选题名称: 局域网聊天程序的设计与实现 姓 名: 薛沈晨 学 号: 110831223 专业班级: 软件工程 软件081 系 (院): 计算机工程学院 设计时间: 2010.6.212010.7.2 设计地点: 软件实验室、教室 成绩:指导教师评语: 签名: 年 月 日面向对象课程设计报告 第 15 页,共 15 页1课程设计目的面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。2课程设计任务与要求:选题:局域网聊天程序的设计与实现该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。客户端程序:可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。通过这次设计,要求掌握以下内容:1) 面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用2) 类、包、接口的定义与使用3) 常用工具类与算法的实现(数组、向量、字符串、链表)4) Java常用标准GUI组件及其事件处理5) Java的异常处理机制3课程设计说明书(1).需求分析:该程序实现局域网内的聊天功能,包括服务器端程序和客户端程序两部分。客户端程序:包括登陆界面和聊天界面,可连接到服务器,并将消息发送到服务器端和接受服务器端发送来的信息。服务器端程序:负责发送用户列表和转发客户端发送来的信息 功能如下:连接:登陆界面输入完整之后将用户的信息发送到服务器端,服务器端创建相应的连接,并将更新后的用户列表发送给所有用户。刷新列表:使客户端发送一段指令到服务器端,然后由服务器端广播新的用户列表到所有的客户端。发送:根据发送者、发送对象、发送的话创建一个字段发送到服务器端接收:根据从服务器端接收到的信息判断发送者、接受者、以及要听的话,选择显示在公共聊天区还是私人聊天区。颜色:设置字体颜色。字体:设置字体,在楷体和宋体之间切换。主题:设置背景图片。快捷键:设置是否开启shift+enter发送快捷键。(2).概要设计: 本程序根据功能设置了两个界面:登陆界面以及聊天界面。 服务器端后台运行监听,没有设置界面。 用例图如下:本程序可以有多个用户,只需在一台服务器上运行服务端程序,所有的用户连接上了之后就可以正常通信。(3).详细设计:类图如下: 本程序共有四个类,在三个源程序里。In和out是客户端和服务器端通信的关键。把发送功能写在了发送按钮的事件响应代码中;由于接收是要保持监听状态的,所以把接收功能写在了一个进程中。快捷键即键盘监听功能写在输入文本框中以实现输入完信息后按shift+enter就能等同点击了发送按钮。改变颜色功能通过调用系统的showDialog。4课程设计成果(1).主要代码: 登陆界面连接服务器:public void link() throws Exception/连接服务器 核心代码hostName = jTextField2.getText().trim(); /主机地址port = Integer.parseInt(jTextField3.getText(); /端口号,默认是4331,参考教科书client = new Socket(hostName,port); /主机地址和端口号组成套接字in = new BufferedReader(new InputStreamReader(client.getInputStream(); /从服务器接收到的 参考,不是很懂out = new PrintWriter(client.getOutputStream(); /发送出去的out.println(jTextField1.getText()+&+sex); /类似这种格式 123&Boyout.flush(); /刷新.输出缓冲区 聊天界面发送信息: public void enter() String mywords,outmsg; String withWho = (String)jComboBox1.getSelectedItem(); /获取是和谁说话trymywords = jTextArea4.getText(); /我说的话if (mywords.trim().length() != 0) /不能发送空消息也不能都发空格 outmsg = withWho&+name+&+withWho+&+mywords;/类似 withWho&tom&hello out.println(outmsg); out.flush();if (withWho.equals(所有人)jTextArea2.append(name+说:+mywords+n);else /对某个人交谈 jTextArea2.append(name+ 对+withWho+说: +mywords+n);catch (Exception ee)System.out.println(ee);jTextArea2.append(与服务器连接中断,请重新登陆!n); finallyjTextArea4.setText(); 聊天界面接收信息代码:public void run() String inmsg;while (true) /循环tryinmsg = in.readLine(); /从流中输入System.out.println(inmsg +inmsg); jList1.setModel(model1); /model和jList参考网上 String userInfo = inmsg.split(&); if (inmsg.startsWith(new) /新人 jTextArea1.append(欢迎 +userInfo1+n); model1.addElement(userInfo1+ +userInfo2+); else if( inmsg.startsWith(old) model1.addElement(userInfo1+ +userInfo2+); /更新用户列表 /一般消息if (inmsg.startsWith(withWho)String showmsg = inmsg.split(&);System.out.println(接收者的名字:+showmsg2+我的名字+name+;n);if (showmsg2.equals(name) /如果是发给自己的消息jTextArea2.append(showmsg1+说: +showmsg3+n); /显示到我的频道 else jTextArea1.append(showmsg1+说:+showmsg3+n); catch (Exception ee)System.out.println(Error at run()+ee);jTextArea2.append(与服务器连接中断,请重新登陆!n);/ 输出流,输入流设置为 nullin = null;out = null;return; 服务器发送给所有人代码:public static void sendAll(String s)if (connections != null)Enumeration e = connections.elements();while(e.hasMoreElements() try PrintWriter pw = new PrintWriter( ( (Socket) e.nextElement() ).getOutputStream() );pw.println(s);pw.flush(); catch (IOException ex)System.out.println(s);服务器发送给指定人代码: public static boolean sendOne(String name,String msg)if (clients != null)Enumeration e = clients.elements();while(e.hasMoreElements() ) ClientProc cp = (ClientProc)e.nextElement(); /枚举所有连接中的用户if (cp.getName().equals(name)tryPrintWriter pw = new PrintWriter(cp.getSocket().getOutputStream();pw.println(msg);pw.flush();return true; /找了返回 且返回值为真catch (IOException ioe)return false;/没有找到服务器发送更新用户信息代码:private void updateList() / 更新用户列表Vector cs = ChatServer.getClients();if (cs != null)for (Enumeration e = cs.elements();e.hasMoreElements() ;) ClientProc cp = (ClientProc)e.nextElement();String exist_name = cp.getName();String exit_sex = cp.getSex();out.println(old+&+exist_name+&+exit_sex); /在这里标记以便判断out.flush(); 服务器处理接收到的信息:public void run()while (name = null)tryString inmsg;inmsg = in.readLine(); / 1111&BoyChatServer.sendAll(new+&+inmsg);/发送信息更新用户列表 new&1111&BoyString userInfo;userInfo = inmsg.split(&);name = userInfo0;sex = userInfo1;/out.println(欢迎 +name); /初次登陆/out.flush();catch (IOException ee)while (true)try /通过客户端发送代码到服务器来执行相应的功能,in.readLine()监视String line = in.readLine(); String inmsg = line.split(&);if (line.equals(quit) /处理退出事件ChatServer.sendAll(withWho&+【系统消息】& +所有人&++ 退出了聊天室);ChatServer.deleteConnection(s,this);return;else if (line.equals(refurbish) /处理刷新用户列表请求this.updateList();else if (line.startsWith(withWho) if(inmsg2.equals(所有人)ChatServer.sendAll(line); elseif (ChatServer.sendOne(inmsg2,line) /out.println(line);/out.flush();elseout.println(withWho&+【系统消息】& +inmsg1+&+inmsg2+已经退出了聊天室);out.flush(); / elseChatServer.sendAll(line); /发给所有的人catch (IOException e)System.out.println(事件 +e);try s.close();catch (IOException e2)return;(2).用户使用说明:在昵称里输入想要使用的名字,在主机地址写入运行服务器端程序的电脑的ip地址,默认为localhost,代表本机,在端口号中输入和服务器端程序约定好的端口号,默认为4331,如果不一致会导致运行失败,最后选择性别后点击“连接”按钮连接服务器,弹出聊天界面。进入聊天界面后在公共聊天区会自动显示“欢迎xx”信息。在用户列表会显示在线的用户,点击某个用户的名字后聊天对象自动变成被电击的用户,默认是所有人。万一用户列表显示不正确,点击刷新按钮可以从服务器重新获取用户列表。个性化设置(仅本地有效):四种主题,字体和颜色自定义,自动换行,发送快捷键。有用户退出会在公共聊天区显示系统信息提示并自动刷新用户列表。(3).测试结果:运行程序首先出现的登陆界面。测试用户:Jarry连接成功后的聊天界面,公共聊天区显示发给所有人的信息,我的频道显示发给指定人的信息。界面为红色,颜色为蓝色,字体为楷体,聊天对象为Tom。 5.课程设计心得我自己感觉此次课程设计做得挺成功的,通过这一次,我学到了不少实际编程的知识。在这次设计开始的第一天开始,我就开始着手修改一个书上的基于客户-服务器端的计算三角形面积的java

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论