2022年java网络聊天软件课程设计 .pdf

上传人:Che****ry 文档编号:27266487 上传时间:2022-07-23 格式:PDF 页数:14 大小:176.99KB
返回 下载 相关 举报
2022年java网络聊天软件课程设计 .pdf_第1页
第1页 / 共14页
2022年java网络聊天软件课程设计 .pdf_第2页
第2页 / 共14页
点击查看更多>>
资源描述

《2022年java网络聊天软件课程设计 .pdf》由会员分享,可在线阅读,更多相关《2022年java网络聊天软件课程设计 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、面向对象程序设计课程设计报告基于 C/S结构的网络聊天室姓名:学院:信息技术学院专业:班级:学号:Eastern Liaoning University 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 1 目录目录. 1一、需求分析 . 2二、系统设计 . 31、服务器端功能 . 32、客户端功能 . 33、通讯流程 . 4三、系统实现 . 5(一)总体设计 . 51服务器端设计. 5 2客户端设计. 5 (二)代码思路 .

2、61定义服务端类Serverly继承 Frame类 . 6 2定义 Cliently类继承 Frame类 . 6 四具体设计 . 8五、系统测试 . 12六、总结 . 13名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 2 一、需求分析电信服务离不开网络编程,资料的传输离不开网络编程,还有很多很多,人们的生活已经离不开网络。为了能迎合人们的需要,本小组决定利用java stocker编程开发一种可以在多操作系统中运行的聊天室软

3、件,以满足人们业余生活的需要。本软件采用Client/Server 结构,将聊天系统划分为两个子系统:客户端子系统,服务器端子系统。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。目前较为流行的网络编程模型是客户机服务器结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户, 同时自己继续监听服务端口, 使后来的客户也能及时得到服务。因此,本项目即设计一个网络聊天程序,并根据这个程序说明连接的

4、建立,套接字的使用,以及端口等问题,实现基于C/S 模式的聊天室程序。聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要登录到服务器端才可以实现正常的聊天功能。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 二、系统设计1、服务器端功能在特定端口上进行侦听,等待客户端连接。用户可以配置服务器端的侦听端口。向已经连接到服务器端的用户发送系统消息。实现多客户群聊功能。统计在线人数。当停止服务时

5、,断开所有的用户连接。2、客户端功能基本功能即可以即时通讯可以查询在线用户基本信息可以进行群聊可以进行私聊可以显示在线用户列表图 2.2:服务器端与客户端提 供 聊 天 服 务 处 理提 供 客 户 端 进 入显示客户端聊天内容断 开 客 户 端 连 接网络服务器端名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 4 3、通讯流程服务器socket( )listen( )阻塞,等待客户数据处理服务请求socket( ) conn

6、ect( )write( )客户机请求数据应答数据面向连接套接口应用程序时序图read( )read( )accept( )write( )建立连接close( )close( )图 2.3:服务器端与客户端通讯流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - 5 三、系统实现(一)总体设计1服务器端设计定义一个服务端类,实现服务器端功能。(1)当初始化界面时,出现图形窗口。(2)当按 begin 按钮时启动连接。(3)服

7、务器接收客户端信息,并把这些信息发送到连接服务器的客户端。(4)客户端接收服务器端信息,并把这些信息发送到服务器。(5)当输入 bye 时结束聊天。2客户端设计定义一个客户端类,实现客户端功能。(1)定义三个内部类,以实现连接按钮的监听、信息接收、对自己信息的监听。(2)定义输入服务器的IP 地址、端口号的控件和用户昵称,在连接时把这些信息传给服务器。(3)发送消息时, 通过对系统的监听显示自己发送的消息,其他用户发送的信息通过服务器转发。图C/S 聊天室的活动图编译源程序运行监听启动服务器客户端接入显 示 消 息发 送 信 息退 出 系 统名师资料总结 - - -精品资料欢迎下载 - - -

8、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - 6 (二)代码思路1定义服务端类 Serverly继承 Frame类(1) 定义两个构造方法,一个构造方法实现客户端不传参数时服务器窗口标题为空,另外一个构造方法实现客户端传参数时服务器窗口标题为此参数值。都要执行窗口的初始化操作。(2)init()方法即窗口初始化方法,实现服务端界面,在界面中定义一个文本区域,设定窗口关闭时系统退出,并启动服务器。(3) boradCast(String str,Socket socket)方法

9、,即向所有在服务器中的客户端广播方法,有两个参数,一个传递只显示的字符串,另一个传递套接字。该方法要判断发送信息的用户是否是自己。(4) startServer()方法,启动服务方法。 等待客户端的请求, 接收到请求后, 产生 socket对象,交给多线程的聊天服务处理。(5)定义内部类Service 类 ,实现 Runnable 接口。有两个属性套接字socket 和用户名 name。定义两个构造方法,一个没有参数实现为空,另一个以套接字socket 作参数,并获取用户名。run()方法,没有参数。当用户发送“quit”时,关闭客户连接。用户发送其他信息时广播信息。(6)定义主方法,实例化S

10、erverly 类。2定义 Cliently类继承 Frame类(1) 把界面组件定义为属性,在 init() 方法中构建界面, 并调用与服务器连接的方法。(2)connect()方法实现与服务器的连接。(3)Recive()方法实现接收服务器发送的信息。(4)sendName()方法实现向服务器发送用户姓名。(5)定义内部类connBttnListener ,实现 ActionLIstener 。(6)定义内部类Recive,实现线程。(7)定义内部类MyListener ,实现 ActionLIstener 。(8)定义 close()方法,实现关闭输出流,关闭套接字。(9)定义主方法,实

11、例化Cliently 类。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 7 图自定义的类Cliently textArea : TextArea textField : TextField nickName : TextField address : TextField port : TextField sendBttn : Button connBttn : Button panel1 : Panel panel2 : P

12、anel socket : Socket printStream : PrintStream Cliently() Cliently(String) init() connet() recive() sendName() Server socket : Socket name : String Servicely(Socket) Servicely() run() Serverly textArea : TextArea socket : Socket socket1 : Socket hashtable : Hashtable Serverly() Serverly(String) init

13、() boradCast(String, Socket) startServer() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 8 四具体设计源程序如下:服务器端: Serverly.java import java.io.*; import .*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Serverl

14、y extends JFrame implements ActionListener ServerSocket server; Socket socket; BufferedReader in; PrintWriter out; JTextField sendText = new JTextField(); JTextArea recieveText = new JTextArea(5, 20); JScrollPane scrollpane = new JScrollPane(recieveText); JLabel label1 = new JLabel(SPEAK :); JLabel

15、label2 = new JLabel(RECEIVE:); JButton btnSend = new JButton(SEND); JButton btnClean = new JButton(CLEAN); public Serverly() super(欢迎您来到服务端); Container c = getContentPane(); c.setLayout(new GridLayout(6, 1, 5, 5); recieveText.setBackground(Color.cyan); sendText.setBackground(Color.cyan); c.add(label

16、1); c.add(sendText); c.add(btnSend); c.add(label2); c.add(scrollpane); c.add(btnClean); btnSend.addActionListener(this); btnClean.addActionListener(this); setSize(400, 400); setDefaultCloseOperation(Serverly.EXIT_ON_CLOSE); / 使JFrame 的 行 为 与Frame 实例相同,请使用setDefaultCloseOperation 名师资料总结 - - -精品资料欢迎下载

17、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - 9 setVisible(true); try socket = new Socket();/ 创建套接字server = new ServerSocket(5005);/ 创建服务器端套接字,指定端口为5005 socket = server.accept();/ 让套接字侦听来自客户端的请求in = new BufferedReader(new InputStreamReader(socket .getInputS

18、tream();/ 封装来自套接字的输入流,使其变成字符流out = new PrintWriter(socket.getOutputStream();/ 生成格式化的套接字输出流的对象while (true) String s = in.readLine();/ 读取套接字输入流的字符recieveText.append(客户机: + s + nr); / 在文本框中追加服务器端发来的数据 catch (IOException e) e.printStackTrace(); public static void main(String args) new Serverly(); public

19、 void actionPerformed(ActionEvent e) if (e.getSource() = btnClean) sendText.setText(); recieveText.setText();/ 清空文本框的内容 else if (e.getSource() = btnSend) out.println(sendText.getText();/ 向套接字输出流输入来自发送文本框的数据out.flush();/ 刷新该缓冲流 客户端: Cliently.java import java.io.*; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

20、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - 10 import .InetAddress; import .ServerSocket; import .Socket; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Cliently extends JFrame implements ActionListener Socket socket; BufferedReader in; P

21、rintWriter out; JTextField sendText = new JTextField(); JTextArea recieveText = new JTextArea(5, 20); JScrollPane scrollpane = new JScrollPane(recieveText); JLabel label1 = new JLabel(SPEAK :); JLabel label2 = new JLabel(RECEIVE:); JButton btnSend = new JButton(SEND); JButton btnClean = new JButton(

22、CLEAN); public Cliently() super(欢迎您使用客户端); Container c = getContentPane(); c.setLayout(new GridLayout(6, 1, 5, 5); c.add(label1); recieveText.setBackground(Color.cyan); sendText.setBackground(Color.cyan); c.add(sendText); c.add(btnSend); c.add(label2); c.add(scrollpane); c.add(btnClean); btnSend.add

23、ActionListener(this); btnClean.addActionListener(this); setSize(400, 400); setVisible(true); try socket = new Socket(InetAddress.getLocalHost(), 5005);/ 创建套接字,指定地址和端口in = new BufferedReader(new InputStreamReader(socket .getInputStream();/ 封装来自套接字的输入流,使其变成字符流out = new PrintWriter(socket.getOutputStre

24、am();/ 生成格式化的套接字输出流的对象while (true) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - 11 String s = in.readLine();/ 读取套接字输入流的字符recieveText.append(服务器: + s + nr);/ 在文本框中追加服务器端发来的数据 catch (IOException e) e.printStackTrace(); public static void

25、 main(String args) new Cliently(); public void actionPerformed(ActionEvent e) if (e.getSource() = btnClean) sendText.setText();/ 清空文本框的内容recieveText.setText(); else if (e.getSource() = btnSend) out.println(sendText.getText();/ 向套接字输出流输入来自发送文本框的数据out.flush();/ 刷新该流的缓冲 名师资料总结 - - -精品资料欢迎下载 - - - - - -

26、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - - - 12 五、系统测试服务端程序运行界面客户端程序运行界面名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - 13 六、总结通过运用 java 语言编写聊天室程序,让我受益匪浅。在此过程中,我了解到自己有很多不足!发现自己对Java 有很多地方都不太了解,对代码的编写也不是很标准

27、!这次课程设计让我也学习到了很多知识。在我的程序代码中运用了许多结构体函数,面板、填充风格等相关函数。通过定义聊天室的客户端和服务器的接收和发送按键,方便了彼此之间的交流。本程序正常运行实现了很多功能,如在服务器端屏幕上提示客户端进入,显示客户端聊天内容。显示本聊天室中的该用户登录后的所有消息。当然,这并不是一个完美的程序,还有许多有待于改进的地方, 有很多很多知识值得我继续去学习,所以,我会在以后的日子里更加系统的去学习,去研究这方面的知识。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁