JAVA实训报告-聊天室.doc

上传人:jian****018 文档编号:8986713 上传时间:2020-04-02 格式:DOC 页数:17 大小:86KB
返回 下载 相关 举报
JAVA实训报告-聊天室.doc_第1页
第1页 / 共17页
JAVA实训报告-聊天室.doc_第2页
第2页 / 共17页
JAVA实训报告-聊天室.doc_第3页
第3页 / 共17页
点击查看更多>>
资源描述
Java实训设计报告电子信息工程学院专业:软件技术班级:1班 实训:聊天室项目简介项目名称聊天室项目功能运用java程序编写聊天室,实现简单的聊天功能。它是图形界面,线程,流与文件系统等技术的综合应用。其界面主要采用了java.awt包,java.swing包以及java.util包等。程序实现了聊天室的基本功能,其中有:1、启动服务器。2、进入客户端界面。3、登录聊天室。4、发送信息(实现按回车键发送消息)。5、关闭服务器项目目的1.能在程序中熟练应用Java 多线程技术2.熟悉Java C/S 程序的结构和工作原理3.能开发客户端应用程序4.会编写服务器端多线程应用程序。5.熟悉Java 数据库连接方法,能在程序中读写数据库主要技术Java编程语言、javaSwing组件开发环境jdk1.6.0_10项目特点使用组件构建的C/S应用程序各项功能的组织合理搭配应用图标控制功能实现技术重点构建基于C/S架构的应用程序Swing组件应用事件监听的应用方法的编写技术难点Swing组件的应用事件监听器的使用异常处理方法简便的选择系统总体设计1、设计思路聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。1首先通过继承JFrame类构造服务器界面。2设计客户端程序使其能够完成正常的通信功能。3设计监听程序,使其显示登录的ip地址端口号,以及用户昵称,通过侦听按钮可以调用客户端程序,实现聊天功能。2、各个模块详细的功能描述。1、服务器端功能描述:启动服务器端。2、客户端功能描述: 启动客户端;显示登录昵称:显示聊天记录:发送信息;退出聊天室。系统详细设计1、界面设计主要由类ChatRoom来实现,界面实际总体如下:输入昵称的文本框,输入IP地址的文本框以及输入端口的文本框;连接的按钮;退出按钮;接受消息的文本域;发送消息文本框;发送按钮。项目设计在设计聊天室时,编写3个Java源文件:Client.java、Frame1.java、ServerThread.java;分别放在两个包中,一个是client,放Client.java、Frame1.java;一个是server,放ServerThread.java;聊天室除了上述Java源文件所给出的类外,还需要Java系统提供的一些重要类,如JButton,JTextField等。下面是Java源文件的总体设计。Client(主类)客户端Client类负责创建聊天室客户端的主窗口,该类含有main方法,计算器从该类开始执行。ServerThread(主类)服务器 ServerThread类负责创建聊天室服务器的主窗口,该类含有main方法,计算器从该类开始执行。二详细代码设计聊天室程序设计详细代码如下:客户端代码:package client;import javax.swing.UIManager;public class Client public Client() Frame1 frame=new Frame1(); frame.setVisible(true); frame.validate(); public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch(Exception e) e.printStackTrace(); new Client(); package client;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.net.*;import java.io.*;public class Frame1 extends JFrame implements Runnable private JPanel contentPane; private TextArea textArea1=new TextArea(); private Label label1=new Label(); private JTextField textField1=new JTextField(); private JButton button1=new JButton(); private JButton button2=new JButton(); private JButton button3=new JButton(); Socket socket=null; BufferedReader in=null; PrintWriter out=null; JTextField server=new JTextField(); JLabel jLabel1=new JLabel(); JLabel jLabel2=new JLabel(); JTextField port=new JTextField(); JScrollPane jScrollPane1=new JScrollPane(); JList jList1=new JList(); JLabel jLabel3=new JLabel(); DefaultListModel l1=new DefaultListModel(); public Frame1() try init(); catch(Exception e) e.printStackTrace(); private void init() throws Exception server.setText(InetAddress.getLocalHost().getHostAddress(); server.setBounds(new Rectangle(69,252,74,22); contentPane=(JPanel)this.getContentPane(); textArea1.setEditable(false); textArea1.setFont(new java.awt.Font(Dialog,Font.PLAIN,14); textArea1.setBounds(new Rectangle(11,9,383,199); textArea1.setBackground(new Color(66,00,233); textArea1.setForeground(new Color(255,00,00); contentPane.setLayout(null); this.setSize(new Dimension(506,314); this.setTitle(客户端); label1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); label1.setForeground(new Color(110,110,250); label1.setText(消息:); label1.setBounds(new Rectangle(26,213,32,27); button1.setActionCommand(发送); button1.setBounds(new Rectangle(334,216,62,23); button1.setEnabled(false); button1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); button1.setText(发送); button1.setForeground(new Color(110,110,250); button1.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button1_actionPerformed(e); ); button2.setBounds(new Rectangle(266,251,58,24); button2.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); button2.setText(连接); button2.setForeground(new Color(110,110,250); button2.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button2_actionPerformed(e); ); button3.setBounds(new Rectangle(333,251,62,22); button3.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); button3.setText(退出); button3.setForeground(new Color(110,110,250); button3.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(ActionEvent e) button3_actionPerformed(e); ); jLabel1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); jLabel1.setToolTipText(); jLabel1.setHorizontalAlignment(SwingConstants.RIGHT); jLabel1.setHorizontalTextPosition(SwingConstants.RIGHT); jLabel1.setText(服务器:); jLabel1.setForeground(new Color(110,110,250); jLabel1.setBounds(new Rectangle(11,254,58,20); jLabel2.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); jLabel2.setToolTipText(); jLabel2.setHorizontalAlignment(SwingConstants.RIGHT); jLabel2.setHorizontalTextPosition(SwingConstants.RIGHT); jLabel2.setText(端口:); jLabel2.setForeground(new Color(110,110,250); jLabel2.setBounds(new Rectangle(172,253,27,18); port.setText(8000); port.setBounds(new Rectangle(202,251,40,22); jList1.setFont(new java.awt.Font(Dialog,Font.PLAIN,12); jLabel3.setBounds(new Rectangle(406,254,91,21); jLabel3.setForeground(new Color(110,110,250); textField1.setBounds(new Rectangle(58,215,271,24); jScrollPane1.setBounds(new Rectangle(404,14,94,226); jScrollPane1.getViewport().add(jList1); contentPane.add(button3,null); contentPane.add(button2,null); contentPane.add(button1,null); contentPane.add(server,null); contentPane.add(jLabel1,null); contentPane.add(textField1,null); contentPane.add(textArea1,null); contentPane.add(jLabel2,null); contentPane.add(port,null); contentPane.add(label1,null); contentPane.add(jScrollPane1,null); contentPane.add(jLabel3,null); jList1.setModel(l1); void button1_actionPerformed(ActionEvent e) out.println(jLabel3.getText()+对+l1.getElementAt(jList1.getSelectedIndex()+说:+textField1.getText(); out.flush(); textField1.setText(); void button3_actionPerformed(ActionEvent e) try out.println(大家尽情聊,再见!); out.flush(); catch(Exception e2) finally System.exit(0); void button2_actionPerformed(ActionEvent e) Thread thread=new Thread(this); thread.start(); public void run() try socket=new Socket(server.getText(),Integer.parseInt(port.getText(); in=new BufferedReader(new InputStreamReader(socket.getInputStream(); out=new PrintWriter(socket.getOutputStream(); button1.setEnabled(true); receiver r=new receiver(); Thread t=new Thread(r); t.start(); textArea1.append(欢迎加入聊天室n); / button2.setEnabled(false); catch(Exception e) textArea1.append(连接失败!请确认服务器地址并且服务器已启动n); private class receiver implements Runnable public void run() String s1=null; try s1=in.readLine(); while(s1!=null) if(s1.equals(Clear users!) l1.removeAllElements(); l1.addElement(大家); jList1.setSelectedIndex(0); else if(jLabel3.getText().equals() jLabel3.setText(s1); else if(s1.length()8&!jLabel3.getText().equals(s1) l1.addElement(s1); else if(!jLabel3.getText().equals(s1) textArea1.append(s1+n); s1=in.readLine(); in.close(); out.close(); socket.close(); catch(Exception e) button1.setEnabled(false); 服务器端代码:package server;import java.net.*;import java.io.*;public class ServerThread implements RunnableServerSocket server=null;BufferedReader in=null;PrintWriter out=null;InetAddress myServer=null;Object users=new Object1000;static int userCount=0;public ServerThread()tryinit();catch(Exception e)e.printStackTrace();private void init() throws ExceptionThread thread=new Thread(this);thread.start();public void run()tryserver=new ServerSocket(8000);Socket socket;while(true)socket=server.accept();if(socket!=null)usersuserCount=socket;Receiver r=new Receiver(socket,userCount);Thread t=new Thread(r);t.start();userCount+;catch(Exception e)e.printStackTrace();private class Receiver implements RunnableSocket socket;int user;Receiver(Socket socket,int user)this.socket=socket;this.user=user;public void run()BufferedReader in=null;PrintWriter out=null;String s1=null;int userNo;tryout=new PrintWriter(socket.getOutputStream();out.println(user+user);out.flush();for(int j=0;juserCount;j+)if(usersj=null)continue;out=new PrintWriter(Socket)usersj).getOutputStream();out.println(Clear users!);out.flush();for(int k=0;kuserCount;k+)out.println(user+k);out.flush();in=new BufferedReader(new InputStreamReader(socket.getInputStream(); s1=in.readLine(); while(!s1.equals(大家尽情聊,再见!) int temp=s1.indexOf(对); int temp1=s1.indexOf(说); String temps=s1.substring(temp+1,temp1); if(temps.equals(大家) for(int j=0;juserCount;j+) if(usersj=null) continue; out=new PrintWriter(Socket)usersj).getOutputStream(); out.println(s1); out.flush(); else try userNo=Integer.parseInt(temps.substring(4); out=new PrintWriter(Socket)usersuserNo).getOutputStream(); out.println(s1); out.flush(); catch(Exception e) s1=in.readLine(); System.out.print(User go); in.close(); out.close(); socket.close();catch(Exception e)public static void main(Stringargs)new ServerThread();运行结果1、 连接服务器小结这次设计经过长期的不懈努力,程序基本满足聊天的需要。完成后的程序实现了用户登陆聊天室、用户在线聊天、用户退出等功能。程序设计期间,通过询问老师,同学和网上搜索相关解答等多种方式学习到很多课堂上没有的知识,还积累了一定的实践经验,增强了动手能力和解决实际问题的能力。在此之前,对于Java编程技术或网络socket编程知识都只是略知皮毛,缺乏深入的认识,对其工作方式和原理缺乏透彻的认识。在这段时间里,我认真学习了Java语言开发,Applet小程序实现,对编程思想有了进一步的体会,养成了一些良好的编程习惯。程序虽然完成,但是距离优秀仍存在一定差距,用JAVA开发大型项目还有很多我需要去努力学习的知识。希望自己能不断学习和实践,争取以后做得更好。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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