1、局域网聊天程序java课程设计 淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 面向对象课程设计 选题名称: 局域网聊天程序的设计与实现 姓 名: 学 号: 专业班级: 软件工程 软件092 系 (院): 计算机工程学院 设计时间: 2011.6.132011.6.24 设计地点: 软件实验室、教室 成绩:指导教师评语: 签名: 年 月 日1课程设计目的面向对象程序设计是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运
2、用面向对象知识分析实际问题、解决实际问题的能力。2课程设计任务与要求:课程设计可选用NetBeans、Eclipse、JBuilder等作为开发平台以提高开发效率,尽可能熟练掌握其中一种集成开发环境。建议采用UML建模技术进行系统的分析设计,在Visio中画出系统用例图和类图,并将UML图复制到设计报告中。通过这次设计,要求掌握以下内容:1)面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用2)类、包、接口的定义与使用3)常用工具类与算法的实现(数组、向量、字符串、链表)4)Java常用标准GUI组件及其事件处理5)Java的异常处理机制6)Java的数据库连接技术7)Java的多
3、线程技术与动画制作8)Java的网络编程课程设计选题:局域网聊天程序的设计与实现开发工具:NetBeans 7.03课程设计说明书选题意义:局域网聊天软件,除了能加强网络之间的信息沟通外,最主要的是可以将网站信息与聊天用户紧密联系在一起。通过网站信息向聊天用户群及时群发送,可以迅速吸引聊天用户群对网站的关注,从而加强网站的访问率与回头率。局域网聊天软件利用的是互联网线路,通过文字、语音、视频、文件的信息交流与互动,有效节省了沟通双方的时间与经济成本;局域网聊天软件不但成为人们的沟通工具,还成为了人们利用其进行电子商务、工作、学习等交流的平台,将日常办公的传统沟通方式替换,有效的减少办公费用的同
4、时,较之更有效率百分之一。达到的目标:快速、方便的短信收发,同时满足个人和企业基于手机短信沟通的需求。功能要求:发送信息,发送图片,发送文件,接收信息,接收图片,接收文件。发起语音对话,发起视频通讯。UML图如下:流程图如下: 建立连接 断开连接 C/S模式套接字的连接示意图4课程设计成果服务器端: 开启服务:private void startServer() try server = new ServerSocket(2345); Accepter accepter=new Accepter(); accepter.start(); catch (IOException ex) JOpti
5、onPane.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&!s
6、tr.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, 提示 服务器断开!); fi
7、nally try server.close(); catch (IOException ex) JOptionPane.showMessageDialog(null, 提示 服务器断开!); 断开连接的方法: private void disconnect() try out.writeUTF(服务器断开连接!); catch (IOException ex) finally done=true; try in.close(); out.close(); catch (IOException ex) JOptionPane.showMessageDialog(null, 警告 出错!); f
8、inally 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 (IO
9、Exception 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 (IOExce
10、ption ex) JOptionPane.showMessageDialog(null, 警告 出错!); 等待客户发来的信息的线程: private class waiter extends Thread public void run() while(!done) / String str=; try /str = in.readUTF(); String str=in.readUTF(); chatcontent.append(客户端:+str+n); catch (IOException ex) JOptionPane.showMessageDialog(null, 警告 连接出错!
11、); 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,
12、ex); byte ip = clientAddress.getAddress(); String strIP = (ip0&0xFF)+.+(ip1&0xFF)+ .+(ip2&0xFF)+.+(ip3&0xFF); remoteIP.setText(strIP); /remotePort.setText(2345); 建立连接: public void connect() try /client = new Socket(127.0.0.1, 2345); client = new Socket(remoteIP.getText(), 2345); in = new DataInputSt
13、ream(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
14、.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); 发送信息: private void send() try in = new DataInputStream(client.getInpu
15、tStream(); 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(
16、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) JOption
17、Pane.showMessageDialog(null, 警告 出错!); finally try client.close(); catch (IOException ex) JOptionPane.showMessageDialog(null, 警告 出错!); 接受服务器端信息的线程: private class waiter extends Thread Override public void run() while(!done) try String str=in.readUTF(); chatcontent.append(服务器端:+str+n); catch (IOExcept
18、ion ex) chatcontent.append(连接出错 信息未发送 n); chatcontent.append(服务器端已经断开 n); disconnect(); 实验截图如下:服务器端开启服务:客户端建立连接后即可同学可以更换背景:服务器断开连接:通讯结束5.课程设计心得经过这次课程设计,我对Java又有了一定地深入了解,这次我选的题目是局域网聊天程序的实现,涉及的编程知识不是太多,主要就是Java网络编程那一块。一开始拿到这个题目,其实并不知道如何下手,因为以前并没有做过此类的程序设计,对网络编程这一块的认识也相对较少。为了写好程序,我开始去图书馆看相关的书籍,了解到利用套接字
19、可以进行网络通讯相关的编程,知道了C/S模式下的局域网聊天程序的方式及其实现形式。知道了要建立网络通讯连接,首先服务器要创建一个服务器的套接字,然后用accept()方法等待客户端的连接,客户端也创建一个客户端套接字,并通过服务器的IP地址和端口号连接服务器,再建立连接之后,就要定义两端的输入输出流,然后依据一定的协议进行数据传输,最后要注意关闭各自的套接字。整个C/S模式的局域网通讯方式就是这样。这次我写的程序相对简单,只实现了服务器和客户端的连接通讯,老师也觉得这个程序太简单了,确实简单了些,不过我也尝试过客户端与客户端的连接,但是似乎线程这一块的程序我并没有写好,总是报错,于是我变舍弃了客户端与客户端连接的实现,虽然课程设计结束了,但是我的Java之路还长,我会利用暑假时间好好补习一下,好好完善我的程序。总的来说,这次课程设计的收获还是很大的,尤其在网络编程,和线程的使用这一块,学到了很多,自己对Java的兴趣也是越开越浓,希望在今后的学习中,自己能够取得不断的进步,让自己的大学变的充实而又精彩。