1、计算机与信息工程系Java课程设计报告专业 班级 学号 姓名 报告完成日期 指导教师 评语:成绩:批阅教师签名: 批阅时间:网络聊天室一、设计任务与目标 现在社会是信息化的社会,什么都追求着快、新、好。在这种快节奏的生活方式中,人们之间的通讯联系就显得非常的重要了。商业之间的合作,人们之间的友谊交往,甚至热门谈到的网上恋爱等等都需要通讯联系。而过去的鸿雁传书已经是满足不了现代人的欲望了。既然这网络这么的流行,过去的联系方式又这么的落后,因此人们的目光就转向了网络通讯。聊天工具就是一种网上很普遍但是又很重要的通讯方式。本聊天软件旨在为同一局域网用户间提供便利的局域网服务,局域网用户可以通过此聊天
2、软件在各终端相互发送聊天信息,同时可以快速传送文件,方便局域网用户间的快速有效通信。二、.设计思路整体方案的制定服务器端后台数据库线程处理线程处理TCP套接字监听端口TCP套接字 客户端2UDP套接字UDP套接字客户端1TCP套接字TCP套接字聊天工具的系统运行图基本设计思想:采用客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。客户端的设计用户之间通过UDP连接来实现用户间的
3、通讯.每个用户在该聊天工具进入主界面时便创建一个线程,无限监听其他好友发来的消息,如果某个好友发来消息,便接受该消息并弹出聊天界面和显示其发来的消息.聊天消息的接受的部分的核心程序流程如下图所示:线程继续监听弹出的聊天界面和显示的信息接到信息线程无限监听客户端中实现UDP的线程 图 聊天消息的接受的部分的核心程序流程聊天消息的发送的部分的核心程序流程如下图所示:建立Socke实现通信并发送聊天的信息输入聊天的信息客户端中聊天界面 图 聊天消息的发送的部分的核心程序流程服务器端的设计服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的
4、通信提供了一个类.Socket.,使得编写网络应用程序相对容易服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8888,然后无限循环调用accept()方法接受客户程序的连接。服务器程序核心部分的流程如下图所示:收到请求Find收到请求new收到请求Login结束线程无限监听客户请求服务器端创建一个线程程处理用户登陆信息处理用户查找信息处理用户注册信息 三、具体实现服务器端实现代码:import java.io.*;import .*;import java.util.*;public class
5、ChatServer boolean started=false;ServerSocket s=null;List clients=new ArrayList();public static void main(String args) new ChatServer().start(); /*启动线程*/public void start() try s=new ServerSocket(8888); started=true; catch(BindException e2) System.out.println(端口使用中); System.out.println(请关掉相关程序,并重新运行
6、服务器!); System.exit(0); catch(IOException e) e.printStackTrace(); trywhile(started) /*当客户端有连接上时开始接收*/ Socket ss=s.accept(); Client c=new Client(ss);System.out.println(A have connect!); new Thread(c).start(); clients.add(c); catch (IOException e) /*突然关闭客户端异常处理*/System.out.println(Client closed!); fina
7、llytry s.close(); catch (IOException e) e.printStackTrace(); class Client implements Runnableprivate Socket ss;private DataInputStream dis=null;private DataOutputStream dos=null;private boolean bconnected=false;public Client(Socket ss) /*接收客户端信息*/this.ss=ss;try dis=new DataInputStream(ss.getInputStr
8、eam();dos=new DataOutputStream(ss.getOutputStream(); bconnected=true; catch (IOException e) e.printStackTrace();public void send(String str) /*发送客户端信息*/try dos.writeUTF(str); catch (IOException e) clients.remove(this);System.out.println(对方退出了!);/e.printStackTrace();public void run() try while(bconne
9、cted) String st=dis.readUTF(); System.out.println(st); for(int i=0;iclients.size();i+) Client c=clients.get(i); c.send(st); System.out.println(a string send!); catch(EOFException e) System.out.print(Client closed!); catch (IOException e) e.printStackTrace(); finally try if(dis!=null) dis.close(); if
10、(dos!=null) dos.close(); if(ss!=null) ss.close(); catch (IOException e1) e1.printStackTrace(); 客户端实现代码:import java.awt.*;import java.io.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.IOExce
11、ption;import .*;import java.text.DateFormat;import java.util.Date;public class ChatClient public static void main(String args) new MyFrame().launchFrame();class MyFrame extends Frame /*构造客户端界面*/TextField tf=new TextField();TextArea ta=new TextArea();Panel p=new Panel();Button b1=new Button(发送文件);But
12、ton b2=new Button(发送图片);Socket soc=null;DataOutputStream dos=null;DataInputStream dis=null;private boolean bConnected=false;Thread tre=new Thread(new RecvThread(); /*产生线程对象*/public void launchFrame()this.setBounds(300, 300, 400,300);add(p,BorderLayout.NORTH);add(tf,BorderLayout.SOUTH);add(ta,BorderL
13、ayout.CENTER);p.add(b1);p.add(b2);pack();this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e)disconnect();System.exit(0););tf.addActionListener(new TFListener();this.setVisible(true);connect();tre.start();public void connect() /*与服务器端连接*/try soc=new Socket(127.0.0.1,88
14、88); dos=new DataOutputStream(soc.getOutputStream(); dis=new DataInputStream(soc.getInputStream();System.out.println(Connected!); bConnected=true; catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();public String getDatetime_System() /*设置日期输出格式*/ DateFormat
15、dt=DateFormat.getInstance(); String datetime=dt.format(new Date().toString(); return datetime; public void disconnect() /*断开连接*/try dos.close();dis.close();soc.close(); catch (IOException e) e.printStackTrace();private class TFListener implements ActionListener /*发送信息监听类*/public void actionPerformed
16、(ActionEvent e) String s= tf.getText().trim(); /ta.setText(s); tf.setText(); try dos.writeUTF(s);dos.flush(); catch (IOException e1) e1.printStackTrace();private class RecvThread implements Runnablepublic void run() trywhile(bConnected)String s=getDatetime_System();String str=昵称:+this.hashCode()+n+s
17、+n+dis.readUTF();ta.setText(ta.getText()+str+n);catch(SocketException e)System.out.println(退出了,bye!);catch(EOFException e)System.out.println(退出了,bye-bye!); catch (IOException e) e.printStackTrace(); 五、程序运行的测试与分析服务器连接成功界面如下图所示:客户端运行结果如下图所示:聊天运行结果如下图所示:六、总结 通过这次毕业设计,我学到了很多.以前学过JAVA这门课程,也做过关于JAVA的简单的程序
18、,但是这次的设计对我来说是一个比较大的挑战,我还是头一次做这么复杂的设计.通过这次设计我主要学到了客户端和服务器的通讯,还有学到了遇到困难应该怎样解决的方法.通过这次的课程设计我学习掌握了很多的知识。不仅在实际动手能力中有了提高,在理论知识方面也有了很大的提高。在准备这个课题前通过自学准备了很多有关网络和线程方面的知识,在刚接触这些知识点时确实感觉到抽象难懂,后来在逐步的学习练习中才慢慢理解掌握。网络编程和多线程的应用在java实际应用中有很大的利用价值,因此我希望通过这次练习提高自己在这两个方面的应用能力。由于都是些陌生的知识,在实际应用中遇到了很多的问题,最后经过查找资料和问询得以解答。信
19、息的传输用到了流处理方面的知识,由于多次用到这方面的知识,在练习中对此有了更多的认识,从陌生的知识逐渐熟练掌握,这要得益于练习的功劳。这次课程设计感触最深的一点是软件的稳定性非常重要,要想写出安全稳定的程序必须对各种异常进行适当的处理,否则程序很容易出错。在学习初期,我们就应该保持良好的编程风格和解决异常处理的思想。此次做的聊天界面太过简单,这一点不太符合良好的界面这一原则,在以后的练习中会注意这方面的改善的。由于课程设计的时间有限,很多必要的功能还都没有实现,很多应用中用到的知识还需要扩展学习需要很多的时间与精力,在接下来的一段时间里我会利用课余时间完备各项功能,使之成为一个真正使用的聊天工具。 七、参考资料1张跃平.JAVA 2 实用教程(第二版)M .北京:清华大学出版社.2Darwin. JAVA经典实例M .北京:中国电力出版社.3杨宗志.JBuilder程序设计实例M .北京:清华大学出版社.4摆渡人工作室.在线聊天室与BBS的设计开发M .北京:机械工业出版社.5姜利群. Java网络编程实例教程M .北京: 北京交通大学出版社。第 11 页 共 11 页
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922