为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

java聊天软件课程设计

2017-09-20 12页 doc 63KB 130阅读

用户头像

is_180829

暂无简介

举报
java聊天软件课程设计java聊天软件课程设计 引言 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识。 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网 编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,...
java聊天软件课程设计
java聊天软件课程 引言 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识。 网络编程的目的就是指直接或间接地通过网络与其他计算机进行通讯。网 编程中有两个主要的问,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。 目录 引言................................................................................................................................................... 0 目录................................................................................................................................................... 1 一、题目分析 ................................................................................................................................... 2 1、编写目的............................................................................................................................. 2 2、基本功能............................................................................................................................. 2 二、 总体设计 ................................................................................................................................. 2 1、概要设计............................................................................................................................. 2 2、设计原理............................................................................................................................. 3 三、客户端设计 ............................................................................................................................... 4 1、数据 ......................................................................................................................... 4 2、客户端代码 ......................................................................................................................... 4 四.测试及效果 ................................................................................................................................. 8 1、服务器界面 ......................................................................................................................... 8 2、客户端界面 ......................................................................................................................... 8 五(心得体会 ................................................................................................................................... 9 六(参考文献 ................................................................................................................................... 9 1 一、题目分析 1、编写目的 1.能在程序中熟练应用数据流技术; 2.熟悉Java C/S程序的结构和工作原理; 3.能开发客户端应用程序; 4.熟悉Java 数据库连接,能在程序中读写数据库。 5. 套接字socket的使用 6熟悉Java线程技术。 2、基本功能 客户端: 可以实现连接服务器端口,与相同的端口号的客户端实现聊天。 服务器端: 用线程技术,随时监听客户端socket发出的连接信号。 二、 总体设计 1、概要设计 本系统运行用JAVA开发,采用C\S结构,系统分为客服端和服务端两大模 块,使用Socket类建立套接字实现客服端和服务端得通讯。 总体数据流图: 发送请求 返回应答 2 客户端数据流图: 发出连接信号 发送消息 客服端 接收并显示消息 服务端数据流图: 监听客户端的信号 服务端 设置端口 2、设计原理 1、服务器建立一个TCP监听端口,等待客户端连接。 2、客户连接服务器,服务器生成一个Socket服务该用户。 3、服务器接收来自客户端的聊天信息,然后遍历转发另一客户端。 4、客户端之间使用UDP通信模式进行单独聊天,不必经过服务器。 3 三、客户端设计 1、数据流程图 开始 输入ip,输入端口号,输连接错误,请检查 入用户名 服务器和端口设置 N 启动 User join,welcome 停止 定义Framechatclient类控制客户端,其中方法FrameChatClient()为析构函数,用于初始化Framechatclient类,创建客户端界面。方法close()用于断开连接,方法sendmsg()用于发送消息。方法actionPerformed()定义事件接口,用于响应按钮的事件。方法Run()时定义线程接口,发送连接服务器信号。 2、客户端代码 public class FrameChatClient extends JFrame implements Runnable,ActionListener{ private JTextField txtServer = null; private JTextField txtPort = null; private JTextField txtUser = null; private JTextField txtChat = null; private JButton btnConnect = null; private JButton btnSend = null; 4 private JButton btnClose = null; private JTextArea ta = null; private Socket client = null; private BufferedReader in = null; private DataOutputStream out = null; private Thread curThread = null; public FrameChatClient() { super("Java聊天程序"); txtServer = new JTextField(10); txtPort = new JTextField(6); txtUser = new JTextField(5); txtChat = new JTextField(38); btnConnect = new JButton("连接"); btnSend = new JButton("发送"); btnClose = new JButton("关闭"); Container cp = this.getContentPane(); Panel p = new Panel(); p.setLayout(new FlowLayout(FlowLayout.LEFT)); )); p.add(new JLabel("服务器:" p.add(txtServer); p.add(new JLabel("端口:")); p.add(txtPort); p.add(new JLabel("用户名:")); p.add(txtUser); p.add(btnConnect); p.add(btnClose); cp.add(p , BorderLayout.NORTH); p = new Panel(); p.setLayout(new FlowLayout(FlowLayout.LEFT)); p.add(new JLabel("发言:")); p.add(txtChat); p.add(btnSend); cp.add(p , BorderLayout.SOUTH); ta = new JTextArea(6 , 35); JScrollPane sp = new JScrollPane(ta); cp.add(sp , BorderLayout.CENTER); btnConnect.addActionListener(this); btnClose.addActionListener(this); btnSend.addActionListener(this); 5 } public void actionPerformed(ActionEvent e) { if (e.getSource() == btnConnect) { String strServer , strPort , strUser ; strServer = txtServer.getText().trim(); strPort = txtPort.getText().trim(); strUser = txtUser.getText().trim(); if (strServer.equals("") || strPort.equals("") || strUser.equals("")) { return; } if (client != null ){ JOptionPane.showMessageDialog(this , "请先断开连接!" , "连接错误" , JOptionPane.PLAIN_MESSAGE); return; } try { client = new Socket(strServer , Integer.parseInt(strPort)); in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new DataOutputStream(client.getOutputStream()); out.writeBytes(strUser + "\n"); curThread = new Thread(this); curThread.start(); }catch(Exception ce) { JOptionPane.showMessageDialog(this , "请检查服务器和端口设置!" , "连接错误" , JOptionPane.PLAIN_MESSAGE);} } if (e.getSource() == btnClose) { close(); } if (e.getSource() == btnSend) { String strChat = txtChat.getText().trim(); txtChat.setText(""); if (strChat.equals("")) { return; } if (strChat.equals("Quit")) { close(); }else { sendMsg(strChat); }}} 6 public void close() { curThread = null; if (client != null) { try { sendMsg("Quit"); in.close(); out.close(); client.close(); }catch(Exception xe) { xe.printStackTrace();} client = null; }else { JOptionPane.showMessageDialog(this , "未连接到服务器!" , " , JOptionPane.PLAIN_MESSAGE);}} "错误 public void sendMsg(String msg) { if (out != null && client != null) { try { out.writeBytes(msg + "\n"); }catch(IOException e) { e.printStackTrace();} }} public void run() { Thread t = Thread.currentThread(); while (t == curThread && client != null) { try { String str = in.readLine(); ta.append(str + "\n"); }catch(IOException e) { e.printStackTrace();} }} 7 四.测试及效果 1、服务器界面 2、客户端界面 8 五(心得体会 经过一个礼拜的课程设计,发现了很多问题,了解到自身的很多不足,同时也更加确定了以后的的学习方向。 通过这个礼拜做《聊天程序》,发现其实自己的java语言的基础有点差,不能及时将学到的东西应用的程序中,同时对socket的掌握也不够。本打算自己独立完成的,但是很多时候想把程序写出来,却有些力不从心,最后还是和同组成员协商及请老师帮忙修改才勉强把程序完成。自己感觉自己愧对自己,学了这么久的java语言。 但是我也确定了自己以后的方向,今后的学习中,我要不断地积累java语言知识,来加强自己写代码的能力。我想只有这样,在下次课程设计来临的时候,我才能做的好一些。 六(参考文献 主要参考了《JAVA语言程序设计》(清华出版社,朱福喜编著),了解到界面编程,多线程编程和网络编程的基本要点。 9
/
本文档为【java聊天软件课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索