ImageVerifierCode 换一换
格式:DOCX , 页数:54 ,大小:286.86KB ,
资源ID:20396577      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20396577.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java课程设计报告java聊天室Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java课程设计报告java聊天室Word文件下载.docx

1、套接字对象在网络编程中扮演者重要的角色,可以用套接字技术编写一个聊天室,服务器为每个客户启动一个线程。在该线程中通过套接字和客户交流信息,当客户向服务器发送一条聊天信息“大家好”时,服务器要让所有的这些线程中的输入流写入信息大家好,这样所有的客户的套接字的输入流就都读取到了这一条信息。如果把信息“你好”发送给特定用户,服务器就让特定线程中的输出流写入信息“你好”,那么只有特定客户的套机字的输入流可以读取到这条信息。在聊天室中需要对用户上线下线的状态进行修改,进而统计在线人数、查找某用户等。因而需要用到java链表来实现。由于Java语言不像c或c+一样可以利用线性表的链式存储结构,用节点和指针

2、来表示,在Java中是没有指针的,但是可以通过使用对象的引用来实现链表。链表的结点个数称为链表的长度。因此在Java中可以定义两个类来实现链表的操作,分别为节点类和链表类。在本设计中对用户的存储就是利用链表来实现的。2.2基本设计概念和处理流程本系统运行用JAVA开发,采用CS结构,系统分为客服端和服务端两大模块,使用Socket类建立套接字实现客服端和服务端得通讯。处理流程服务端 客户端一个ServerSocket对象和一个Socket对象 一个Socketd对象TCP Socket通信流程2.3总体结构2.4功能分配客户端向所有人或一个人发送消息服务端2.5接口设计2.5.1用户接口提供一

3、个用户操作界面:包括用户可以再界面中登录聊天室、输入消息、浏览聊天内容和聊天对象。同时提供一个服务器操作界面,通过服务器操作界面可以修改服务器的配置,知道用户的当前状态,并可以给用户发送指定系统信息。2.5.2内部接口Socket(string hont ,int port );客户端使用Socket类建立与服务器的套接字连接。ServerSocket(int port);建立接收客户的套接字的服务器套接字。2.6主要模块2.6.1聊天室服务器端模块聊天室服务器端模块主要有以下几部分组成1、 主框架类(ChatServer.java)该文件包含名为ChatServer的public类,其主要功

4、能是定义服务器的界面,添加事件侦听鱼事件处理。ChatServer类调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端消息的转发。2、 服务器用户上线与下线侦听类。该类对用户上线与下线的侦听是通过调用用户链表类来实现的,当用户的上线与下线情况发生改变时,该类会对主类的界面进行相应的修改。3、 服务器消息收发类该类分别定义了向某用户及向所有人发送消息的方法,发送的消息会显示在主界面类的界面上。4用户修改配置的类。该类继承自JDialog。使用户对服务器端口进行修改配置的类。5节点类定义了链表中的用户6链表类该类通过构造函数构造用户链表,

5、定义了添加用户、删除用户、返回用户数、根据用户名查找用户和各根据索引查找用户等方法。7服务器帮助类、2.6.2聊天室服务器端模块算法描述服务器端的ChatServer类继承自JFrame并实现相应的事件监听接口,因此它定义了服务器的主框架,及各个按钮的事件监听。它分别调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端消息的转发。同时服务器可以响应多个客户的请求,当一个客户发送请求时,服务器就为它增加一个线程,同时服务器利用UserLinkList类为客户端设置一个请求队列,如果服务器不能马上响应客户端的请求,就要把这个请求放到请求队列

6、在中,等服务器将当前的请求处理完,会自动到请求队列中按照先后顺序取出请求进行处理。2.6.3聊天室客户端模块客户端主要有以下几个文件,功能如下:1客户端主框架类该类主要定义客户端的界面,添加事件侦听与事件处理。该类定义了与服务器实现连接与断开连接的方法。当用户登录到指定的服务器上时,该类条用客户端实现消息收发的类实现消息的收发。同时该类定义了向所有用户发送消息的方法。2客户端消息收发的类该类实现了服务器与客户端消息的收发3用户修改配置的类该类继承自JDialog,是用户对要连接的服务器IP及侦听端口进行修改配置的类。4帮助类客户端用户程序的帮助类2.6.4聊天室客户端模块主要算法描述 客户端C

7、hatClient类继承了JFrame并实现相应的事件监听接口。它实现了客户端的主界面及相应按钮的事件侦听。该类调用ClientReceive类实现消息的收发。通过相应的输入输出流与服务器进行数据的传递与交流。三、 主要代码实现3.1服务器主要代码实现1、Chatserver类:包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加事件侦听与事件处理。调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。import java.awt.*;import java.awt.event.*;impor

8、t javax.swing.*;import javax.swing.event.*;import .*;import java.io.*;/* * 聊天服务端的主框架类 */public class ChatServer extends JFrame implements ActionListener public static int port = 8888;/服务端的侦听端口 ServerSocket serverSocket;/服务端Socket Image icon;/程序图标 JComboBox combobox;/选择发送消息的接受者 JTextArea messageShow;

9、/服务端的信息显示 JScrollPane messageScrollPane;/信息显示的滚动条 JTextField showStatus;/显示用户连接状态 JLabel sendToLabel,messageLabel; JTextField sysMessage;/服务端消息的发送 JButton sysMessageButton;/服务端消息的发送按钮 UserLinkList userLinkList;/用户链表 /建立菜单栏 JMenuBar jMenuBar = new JMenuBar(); /建立菜单组 JMenu serviceMenu = new JMenu (服务(

10、V); /建立菜单项 JMenuItem portItem = new JMenuItem (端口设置(P) JMenuItem startItem = new JMenuItem (启动服务(S) JMenuItem stopItem=new JMenuItem (停止服务(T) JMenuItem exitItem=new JMenuItem (退出(X) JMenu helpMenu=new JMenu (帮助(H) JMenuItem helpItem=new JMenuItem ( /建立工具栏 JToolBar toolBar = new JToolBar(); /建立工具栏中的按

11、钮组件 JButton portSet;/启动服务端侦听 JButton startServer; JButton stopServer;/关闭服务端侦听 JButton exitButton;/退出按钮 /框架的大小 Dimension faceSize = new Dimension(400, 600); ServerListen listenThread; JPanel downPanel ; GridBagLayout girdBag; GridBagConstraints girdBagCon; /* * 服务端构造函数 public ChatServer() init();/初始化

12、程序 /添加框架的关闭事件处理 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); /设置框架的大小 this.setSize(faceSize); /设置运行时窗口的位置 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation( (int) (screenSize.width - faceSize.getWidth() / 2, (int) (screenSize.height - faceSize.

13、getHeight() / 2); this.setResizable(false); this.setTitle(聊天室服务端 /设置标题 /程序图标 icon = getImage(icon.gif this.setIconImage(icon); /设置程序图标 show(); /为服务菜单栏设置热键V serviceMenu.setMnemonic( /为端口设置快捷键为ctrl+p portItem.setMnemonic (P portItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_P,InputEvent.CTRL

14、_MASK); /为启动服务快捷键为ctrl+s startItem.setMnemonic (S startItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_S,InputEvent.CTRL_MASK); /为端口设置快捷键为ctrl+T stopItem.setMnemonic (T stopItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_T,InputEvent.CTRL_MASK); /为退出设置快捷键为ctrl+x exitItem.setMnemoni

15、c (X exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK); /为帮助菜单栏设置热键H helpMenu.setMnemonic( /为帮助设置快捷键为ctrl+p helpItem.setMnemonic ( helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK); * 程序初始化函数 public void init() Container contentPa

16、ne = getContentPane(); contentPane.setLayout(new BorderLayout(); /添加菜单栏 serviceMenu.add (portItem); serviceMenu.add (startItem); serviceMenu.add (stopItem); serviceMenu.add (exitItem); jMenuBar.add (serviceMenu); helpMenu.add (helpItem); jMenuBar.add (helpMenu); setJMenuBar (jMenuBar); /初始化按钮 portSe

17、t = new JButton(端口设置 startServer = new JButton(启动服务 stopServer = new JButton(停止服务 ); exitButton = new JButton(退出 /将按钮添加到工具栏 toolBar.add(portSet); toolBar.addSeparator();/添加分隔栏 toolBar.add(startServer); toolBar.add(stopServer); toolBar.add(exitButton); contentPane.add(toolBar,BorderLayout.NORTH); /初始

18、时,令停止服务按钮不可用 stopServer.setEnabled(false); stopItem .setEnabled(false); /为菜单栏添加事件监听 portItem.addActionListener(this); startItem.addActionListener(this); stopItem.addActionListener(this); exitItem.addActionListener(this); helpItem.addActionListener(this); /添加按钮的事件侦听 portSet.addActionListener(this); s

19、tartServer.addActionListener(this); stopServer.addActionListener(this); exitButton.addActionListener(this); combobox = new JComboBox(); combobox.insertItemAt(所有人,0); combobox.setSelectedIndex(0); messageShow = new JTextArea(); messageShow.setEditable(false); /添加滚动条 messageScrollPane = new JScrollPan

20、e(messageShow, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); messageScrollPane.setPreferredSize(new Dimension(400,400); messageScrollPane.revalidate(); showStatus = new JTextField(35); showStatus.setEditable(false) sysMessage = new JTextField(24); sysMessage.

21、setEnabled(false); sysMessageButton = new JButton(); sysMessageButton.setText(发送 /添加系统消息的事件侦听 sysMessage.addActionListener(this); sysMessageButton.addActionListener(this); sendToLabel = new JLabel(发送至: messageLabel = new JLabel(发送消息: downPanel = new JPanel(); girdBag = new GridBagLayout(); downPanel

22、.setLayout(girdBag); girdBagCon = new GridBagConstraints(); girdBagCon.gridx = 0; girdBagCon.gridy = 0; girdBagCon.gridwidth = 3; girdBagCon.gridheight = 2; girdBagCon.ipadx = 5; girdBagCon.ipady = 5; JLabel none = new JLabel( girdBag.setConstraints(none,girdBagCon); downPanel.add(none); girdBagCon.

23、gridy = 2; girdBagCon.insets = new Insets(1,0,0,0); girdBag.setConstraints(sendToLabel,girdBagCon); downPanel.add(sendToLabel); girdBagCon.gridx =1; girdBagCon.anchor = GridBagConstraints.LINE_START; girdBag.setConstraints(combobox,girdBagCon); downPanel.add(combobox); girdBagCon.gridy = 3; girdBag.

24、setConstraints(messageLabel,girdBagCon); downPanel.add(messageLabel); girdBagCon.gridx = 1; girdBag.setConstraints(sysMessage,girdBagCon); downPanel.add(sysMessage); girdBagCon.gridx = 2; girdBag.setConstraints(sysMessageButton,girdBagCon); downPanel.add(sysMessageButton); girdBagCon.gridy = 4; gird

25、Bag.setConstraints(showStatus,girdBagCon); downPanel.add(showStatus); contentPane.add(messageScrollPane,BorderLayout.CENTER); contentPane.add(downPanel,BorderLayout.SOUTH); /关闭程序时的操作 this.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) stopService(); System.exit(0); * 事件处理 public void actionPerformed(ActionEvent e) Object obj = e.getSour

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1