您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页局域网聊天程序java课程设计

局域网聊天程序java课程设计

来源:五一七教育网


淮 海 工 学 院 计算机工程学院

课程设计报告

设计名称: 面向对象课程设计 选题名称: 局域网聊天程序的设计与实现 姓 名: 学 号: 专业班级: 软件工程 软件092 系 (院): 计算机工程学院 设计时间: 2011.6.13~2011.6.24 设计地点: 软件实验室、教室

指导教师评语: 成绩: 签名: 年 月 日 面向对象课程设计报告 第 2 页,共 12 页

1.课程设计目的 《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力。 2.课程设计任务与要求: 课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。 通过这次设计,要求掌握以下内容: 1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 2)类、包、接口的定义与使用 3)常用工具类与算法的实现(数组、向量、字符串、链表) 4)Java常用标准GUI组件及其事件处理 5)Java的异常处理机制 6)Java的数据库连接技术 7)Java的多线程技术与动画制作 8)Java的网络编程 课程设计选题:局域网聊天程序的设计与实现 开发工具:NetBeans 7.0 3.课程设计说明书 面向对象课程设计报告 第 3 页,共 12 页 选题意义:局域网聊天软件,除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊天用户紧密联系在一起。通过网站信息向聊天用户群及时群发送,可以迅速吸引聊天用户群对网站的关注,从而加强网站的访问率与回头率。局域网聊天软件利用的是互联网线路,通过文字、语音、视频、文件的信息交流与互动,有效节省了沟通双方的时间与经济成本;局域网聊天软件不但成为人们的沟通工具,还成为了人们利用其进行电子商务、工作、学习等交流的平台,将日常办公的传统沟通方式替换,有效的减少办公费用的同时,较之更有效率百分之一。 达到的目标:快速、方便的短信收发,同时满足个人和企业基于手机短信沟通的需求。 功能要求:发送信息,发送图片,发送文件,接收信息,接收图片,接收文件。发起语音对话,发起视频通讯。 UML图如下: 局域网聊天启动服务器停止服务器建立连接服务器端断开连接客户端发送信息接收信息 面向对象课程设计报告 第 4 页,共 12 页 流程图如下: 建立连接 断开连接 连接结束 断开服务,连接断开 断开连接 服务器端 客户端 连接成功,可以通讯 开启服务,等待连接 建立连接 服务器端 客户端 C/S模式套接字的连接示意图 Server.close() 关闭套接字连接 Client.close() 关闭套接字连接 DataInputStream DataOutputStream DataInputStream DataOutputStream ServerSocket server Server.aet()等待客户… Socket client 定义客户端的套接字 服务器端 客户端 4.课程设计成果 面向对象课程设计报告 第 5 页,共 12 页

服务器端: 开启服务: private void startServer(){ try { server = new ServerSocket(2345); Accepter accepter=new Accepter(); accepter.start(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } } 发送信息: private void send(){ done = false; try { in = new DataInputStream(client.getInputStream()); out= new DataOutputStream(client.getOutputStream()); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } String str=sentence.getText(); if(str!=null&&!str.equals(\"\")) { chatcontent.append(\"本地端:\"+str+\"\\n\"); try{ out.writeUTF(str); } catch(IOException e1){ chatcontent.append(\"客户端不存在...\\n\"); } } else{ chatcontent.append(\"聊天信息不能为空\\n\"); } } 停止服务器: private void stopServer(){ done = true; try { out.writeUTF(\"服务器断开!\"); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"提示 服务器断开!\"); }finally{ try { server.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"提示 服务器断开!\"); } } } 断开连接的方法: private void disconnect(){ 面向对象课程设计报告 第 6 页,共 12 页

try { out.writeUTF(\"服务器断开连接!\"); } catch (IOException ex) { } finally{ done=true; try { in.close(); out.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } finally{ try { client.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } } } } 接受连接的方法: private void acceptConnect(){ try { in = new DataInputStream(client.getInputStream()); out= new DataOutputStream(client.getOutputStream()); done=false; waiter wait=new waiter(); wait.start(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } } 等待客户发来连接请求的线程: private class Accepter extends Thread{ @Override public void run(){ while(!done){ try { client = server.accept(); acceptConnect(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } } try { server.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } } } 等待客户发来的信息的线程: private class waiter extends Thread { public void run(){ 面向对象课程设计报告 第 7 页,共 12 页

while(!done){ // String str=\"\"; try { //str = in.readUTF(); String str=in.readUTF(); chatcontent.append(\"客户端:\"+str+\"\\n\"); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 连接出错!\"); } } chatcontent.append(\"客户端已经断开 \\n\"); disconnect(); } } 客户端: 客户端接受信息的线程: public class ChatClient extends javax.swing.JFrame { public ChatClient() { initComponents(); try { clientAddress = InetAddress.getLocalHost(); } catch (UnknownHostException ex) { Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); } byte[] ip = clientAddress.getAddress(); String strIP = (ip[0]&0xFF)+\".\"+(ip[1]&0xFF)+ \".\"+(ip[2]&0xFF)+\".\"+(ip[3]&0xFF); remoteIP.setText(strIP); //remotePort.setText(\"2345\"); } 建立连接: public void connect(){ try { //client = new Socket(\"127.0.0.1\ client = new Socket(remoteIP.getText(), 2345); in = new DataInputStream(client.getInputStream()); out= new DataOutputStream(client.getOutputStream()); chatcontent.append(\"连接成功!\\n\"); waiter wait=new waiter(); wait.start(); } catch (UnknownHostException ex) { // Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); chatcontent.append(\"连接失败!\\n\"); //stopConnection.setEnabled(false); //send.setEnabled(false); } catch (IOException ex) { // Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); chatcontent.append(\"连接失败!\\n\"); //stopConnection.setEnabled(false); //send.setEnabled(false); 面向对象课程设计报告 第 8 页,共 12 页

} } 发送信息: private void send(){ try { in = new DataInputStream(client.getInputStream()); out= new DataOutputStream(client.getOutputStream()); } catch (IOException ex) { Logger.getLogger(ChatClient.class.getName()).log(Level.SEVERE, null, ex); } String str=sentence.getText(); if(str!=null&&!str.equals(\"\")) { chatcontent.append(\"本地端:\"+str+\"\\n\"); try{ //out.writeUTF(sentence.getText()); out.writeUTF(str); } catch(IOException e1){ chatcontent.append(\"服务器已断开...\\n\"); } } else{ chatcontent.append(\"聊天信息不能为空\\n\"); } sentence.setText(\"\"); } 断开连接: private void disconnect(){ try { out.writeUTF(\"连接结束!\"); } catch (IOException ex) { chatcontent.append(\"警告 出错!\\n\"); } finally { done=true; try { in.close(); out.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } finally { try { client.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, \"警告 出错!\"); } } } } 接受服务器端信息的线程: private class waiter extends Thread { @Override public void run(){ 面向对象课程设计报告 第 9 页,共 12 页

while(!done){ try { String str=in.readUTF(); chatcontent.append(\"服务器端:\"+str+\"\\n\"); } catch (IOException ex) { chatcontent.append(\"连接出错 信息未发送 \\n\"); } } chatcontent.append(\"服务器端已经断开 \\n\"); disconnect(); } } 实验截图如下: 服务器端开启服务: 面向对象课程设计报告 第 10 页,共 12 页

客户端建立连接后即可同学 可以更换背景: 面向对象课程设计报告 第 11 页,共 12 页

服务器断开连接: 通讯结束 5.课程设计心得 面向对象课程设计报告 第 12 页,共 12 页 经过这次课程设计,我对Java又有了一定地深入了解,这次我选的题目是局域网聊天程序的实现,涉及的编程知识不是太多,主要就是Java网络编程那一块。一开始拿到这个题目,其实并不知道如何下手,因为以前并没有做过此类的程序设计,对网络编程这一块的认识也相对较少。为了写好程序,我开始去图书馆看相关的书籍,了解到利用套接字可以进行网络通讯相关的编程,知道了C/S模式下的局域网聊天程序的方式及其实现形式。知道了要建立网络通讯连接,首先服务器要创建一个服务器的套接字,然后用accept()方法等待客户端的连接,客户端也创建一个客户端套接字,并通过服务器的IP地址和端口号连接服务器,再建立连接之后,就要定义两端的输入输出流,然后依据一定的协议进行数据传输,最后要注意关闭各自的套接字。整个C/S模式的局域网通讯方式就是这样。这次我写的程序相对简单,只实现了服务器和客户端的连接通讯,老师也觉得这个程序太简单了,确实简单了些,不过我也尝试过客户端与客户端的连接,但是似乎线程这一块的程序我并没有写好,总是报错,于是我变舍弃了客户端与客户端连接的实现,虽然课程设计结束了,但是我的Java之路还长,我会利用暑假时间好好补习一下,好好完善我的程序。总的来说,这次课程设计的收获还是很大的,尤其在网络编程,和线程的使用这一块,学到了很多,自己对Java的兴趣也是越开越浓,希望在今后的学习中,自己能够取得不断的进步,让自己的大学变的充实而又精彩。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务