首页 聊天室系统的开发

聊天室系统的开发

举报
开通vip

聊天室系统的开发在上面小张对在开发中要用到的开发工具给开发组成员做了详细的介绍,还有一些小程序的测试与说明,这样让公司的人对Java语言有了一定的了解,下面就是公司的开发项目聊天室程序的开发过程,在这个过程中他对代码也做了详细的注释。 聊天室系统效果图如图4-1所示: 图4-1聊天室系统界面 4.1 需求分析 4.1.1 设计目标 1、项目说明 项目名称:JAVA聊天室系统。 客户:一般大众。 2、项目背景 聊天室是网络社区中最主要的表现形式之一,在网络营销中有着独到的应用。网络社区可以增进和访问者或客户之间的关系,也可能直接...

聊天室系统的开发
在上面小张对在开发中要用到的开发工具给开发组成员做了详细的介绍,还有一些小程序的测试与说明,这样让公司的人对Java语言有了一定的了解,下面就是公司的开发项目聊天室程序的开发过程,在这个过程中他对代码也做了详细的注释。 聊天室系统效果图如图4-1所示: 图4-1聊天室系统界面 4.1 需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 4.1.1 设计目标 1、项目说明 项目名称:JAVA聊天室系统。 客户:一般大众。 2、项目背景 聊天室是网络社区中最主要的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 现形式之一,在网络营销中有着独到的应用。网络社区可以增进和访问者或客户之间的关系,也可能直接促进网上销售。聊天室(Chat Room):在线用户可以实时交流,对某些话题有共同兴趣的网友通常可以利用聊天室进行深入交流。可以与访问者直接沟通,容易得到访问者的信任,如果我们的网站是商业性的,我们可以了解客户对产品或服务的意见,访问者很可能通过和我们的交流而成为真正的客户,因为人们更愿意从了解的商店或公司购买产品;如果是学术性的站点,则可以方便地了解同行的观点,收集有用的信息,并有可能给自己带来启发。 3、每项任务所需技能 服务端与客户端的连接:熟悉网络编程中的 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 及数据流。 程序界面设计:可视化编程技能。 代码实现:JAVA编程。 4、所采用的工具 开发工具:JBuilder 2005+jdk4.2。 开发环境:Windows 2000 server。 4.1.2 功能需求 随着经济的日益发展,网络的观念深入人心。人们越来越需要通过网络高效简捷的交流,聊天室就是其中的一个工具。 1.软件主要功能: (1)允许所有用户无须通过注册,可以直接登录聊天室。 (2)显示用户登录,退出信息。 (3)允许用户在公共聊天室中聊天。 (4)允许在线用户查看其他在线用户的列表。 (5)不允许用户发送空消息。 (6)采取服务器端+客户端的模式,服务器端可以控制聊天室服务的启动,关闭,及发送系统消息。 2.界面设计 登录界面(执行功能): (1)登录服务器端 (2)确定用户信息 如图4-2所示: 密码: 图4-2 登陆界面 聊天界面(执行功能): (1)显示在线用户列表。 (2)显示公共聊天室中的其他用户发送的消息。 (3)发送消息。 (4)显示其它用户登录、退出信息,退出时,在其他用户的聊天界面上无法看到此用户。如图4-3所示: 发送 图4-3 聊天界面 聊天界面与服务器之间的交互。如图4-4所示: 聊天界面 将“用户退出”消息 发送给聊天服务器 将消息发送给聊天服务器 用户在聊天界面中单击发送按钮 聊天服务器 从在线用户列表中删去用户 更新消息和在线用户信息 图4-4聊天界面与服务器之间的交互图 4.2 总体设计 4.2.1 功能模块划分 总体设计上可分为六个功能模块,主要是: 登陆 启动客户端 启动服务端 服务主页面 退出 聊天室主页面 图4-5功能模块图 4.2.2 系统主要框架 系统主要框架,如图4-6所示: 多线程服务器 图4-6系统主要框架图 4.3 详细设计 4.3.1 多线程服务器 下面是多线程类的定义,该定义是定义在MultiJabberServer.java中: //=========================程序开始============================// //DBC MultiJabberServer.java /** *

Description: The multithread server and the server for one client.

*

Copyright: Copyright (c) 2005

*

Company:

* @author kentty * @version 1.0 */ public class MultiJabberServer extends Thread {   public static final int PORT = 5555;  //The PORT of chat service,you can change this number.   public String []user;      //To store the users   public static int num;    //The total useres   ServerSocket ss;        //ServerSocket   TotalClient client;      //the client     /**   * The constructer.   * @throws IOException   */   public MultiJabberServer() throws IOException   {     user = new String[100];     client = new TotalClient();     ss = new ServerSocket(PORT);   }   /**   * The thread running method.   * @return void   */   public void run()   {     JOptionPane.showMessageDialog(new JWindow(),"服务器已启动!"+ss,"系统消息",JOptionPane.INFORMATION_MESSAGE);     System.out.println("Server started:" + ss);     try {       while (true) {         Socket s = ss.accept();//While one client connected the server return one socket.         client.add(s);    //add the client to totalclient.         client.elementCount++;         client.currentclient++;         ServeoneJabber soj = new ServeoneJabber(s, client,user,num++); //Start the serveronejabber to serve the client.         System.out.println("Connection accepted:" + s);       }     }     catch (IOException ioe) {       ioe.printStackTrace();     }     catch (Exception e) {       e.printStackTrace();     }   } 通过初始化,先生成ServerSocket:     ss = new ServerSocket(PORT); 当启动多线程服务器后,服务器就处于监听状态。     Socket s = ss.accept(); 当一个客户端进行连接后,服务器端便返回一个Socket,我们就可以利用这个Socket去找到任一对应的客户端,进行后面的发送消息等操作。       /**   * Send system message to the total client.   * @param mess String   * @throws IOException   * @return String the status of the result.   * @author kentty   * @version 1.0   */       public String castMessage(String mess) throws IOException       {     boolean isSend=false;     int i;     for (i = 0; i < client.elementCount; i++)           {             Socket sss = (Socket)client.elementAt(i);             System.out.println(sss);             PrintWriter everyout = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sss.getOutputStream())),true);             everyout.println(">>>>系统广播: "+mess);             System.out.println("Send ok!");           }           if (i == client.elementCount+1)           {             isSend = true;           }           if (isSend==true)           {             return (mess);           }           return "";       } } //========================程序结束===========================// 4.3.2 服务器主界面 下面是服务器主界面程序分析: 设计思想: StartServer类继承自Jframe类,提供操作界面,并实现ActionListener接口,进行事件侦听。 (1)界面设计,提供“启动服务器”、“关闭服务器”、“启动客户端”、“关闭客户端”、“发送系统广播”按扭,显示服务器状态信息的状态栏,提供“系统消息”文本框。 (2)当点击“启动服务器”后,启动一个MultiJabberServer对象,并进行端口侦听。 (3)发送系统广播,向每一个客户端发送消息。 (4)在信息提示栏显示相应的提示信息。 //============================程序开始===========================// //DBC  StartServer.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; public class StartServer extends JFrame implements ActionListener {   JFrame menuj;   JFrame totaluserj;   JFrame contentj;   JButton startserver;   JButton stopserver;   JButton startclient;   JButton stopclient;   JTextField state;   JTextArea messagearea;   JScrollPane textAreaScrollPane; //  JTextArea totaluser;   JLabel tishi;   JTextField content;   JButton send;   MultiJabberServer mjs;   public StartServer()   {     menuj = new JFrame();     totaluserj = new JFrame();     contentj = new JFrame();     startserver = new JButton("启动服务器");     stopserver = new JButton("关闭服务器");     startclient = new JButton("启动客户端");     stopclient = new JButton("关闭客户端");     state = new JTextField(15);     state.setEditable(false); //    totaluser = new JTextArea();     tishi = new JLabel("系统广播:");     content = new JTextField(20);     send = new JButton("发送");     messagearea = new JTextArea();     messagearea.setEditable(false);     textAreaScrollPane = new JScrollPane(messagearea);     menuj.getContentPane().setLayout(new FlowLayout());     menuj.getContentPane().add(startserver);     menuj.getContentPane().add(stopserver);     menuj.getContentPane().add(startclient);     menuj.getContentPane().add(stopclient);     menuj.getContentPane().add(state);     totaluserj.getContentPane().setLayout(new BorderLayout());     totaluserj.getContentPane().add(textAreaScrollPane,BorderLayout.CENTER);     contentj.getContentPane().setLayout(new BorderLayout());     contentj.getContentPane().add(tishi,BorderLayout.WEST);     contentj.getContentPane().add(content,BorderLayout.CENTER);     contentj.getContentPane().add(send,BorderLayout.EAST);     this.getContentPane().setLayout(new BorderLayout());     this.getContentPane().add(menuj.getContentPane(),BorderLayout.NORTH);     this.getContentPane().add(totaluserj.getContentPane(),BorderLayout.CENTER);     this.getContentPane().add(contentj.getContentPane(),BorderLayout.SOUTH);     startserver.addActionListener(this);     stopserver.addActionListener(this);     startclient.addActionListener(this);     stopclient.addActionListener(this);     content.addActionListener(this);     send.addActionListener(this);   }   public static void main(String[] args)   {     StartServer ss = new StartServer();     try     {       ss.mjs = new MultiJabberServer();     }catch(IOException ioe)     {       ss.showState("can't");     }     ss.setSize(600,400);     ss.setVisible(true);     ss.setResizable(false);     ss.setDefaultCloseOperation(EXIT_ON_CLOSE);     ss.setTitle("^_^  欢迎使用JAVA爱好者BBS系统『服务器』");   }//   public void showState(String states)   {     if (states.equals("start"))     {       state.setText("服务器已启动...");     }     else if (states.equals("stop"))     {       state.setText("服务器已关闭!");     }     else if(states.equals("can't"))     {       state.setText("不能启动服务线程!");     }     else       state.setText(states);   }   public void actionPerformed(ActionEvent e)   {     if(e.getSource()==content||e.getSource()==send)     {       String mess= content.getText();       content.setText("");       try       {         String messstr=this.mjs.castMessage(mess);         messagearea.append("系统消息已发送: "+mess+"\n");       }catch(IOException ioe)       {         showState("不能发送消息!");       }     }     else if (e.getSource()==startserver)     {     this.mjs.start();    //启动服务器     showState("start");     }     else if(e.getSource()==stopserver)     {       this.mjs.stop();       showState("stop");     }     else if(e.getSource()==startclient)     {       String [] args=new String[5];       new LoginFrame().main(args);     }     else if(e.getSource()==stopclient)     {     }   } } //============================程序结束=========================// 4.3.3 登陆界面 设计思想: (1)提供用户登陆界面,用户信息输入、连接服务器等功能。 (2)常用用户信息正确性验证。 (3)登陆成功后,生成一个客户端的主界面对象,由该对象生成一个客户端对象。 //==========================程序开始=========================// //DBC LoginFrame.class import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LoginFrame extends JFrame implements ActionListener {   private JPanel center;   private Container mainc;   private String username;   private String passwords;   private int pp;   JTextField u;   JTextField p;   JTextField s;   JTextField serverport;   JLabel selectserver;   JLabel port;   JLabel user;   JLabel pass;   JButton ok;   JButton cancle;   public LoginFrame()   {     selectserver = new JLabel("服务器:");     port = new JLabel("端  口:");     user = new JLabel("用户名:");     pass = new JLabel("密  码:");     ok = new JButton("确定");     cancle = new JButton("取消");     u = new JTextField("LGT",12);     p = new JTextField("None",12);     s = new JTextField("ServerName",12);     serverport = new JTextField("5555",12);     mainc = this.getContentPane();     mainc.setLayout(new FlowLayout());     ok.addActionListener(this);     cancle.addActionListener(this);     u.addActionListener(this);     p.addActionListener(this);     s.addActionListener(this);     serverport.addActionListener(this);     mainc.add(selectserver);     mainc.add(s);     mainc.add(port);     mainc.add(serverport);     mainc.add(user);     mainc.add(u);     mainc.add (pass);     mainc.add(p);     mainc.add(ok);     mainc.add(cancle);   }   public static void main(String[] args)   {     LoginFrame log = new LoginFrame();     log.setSize(250,180);     log.setVisible(true);     log.setDefaultCloseOperation(EXIT_ON_CLOSE);     log.setResizable(false);     log.setTitle("JAVA.BBS.登陆");   }   public void actionPerformed(ActionEvent e)   {     if (e.getSource()==ok||e.getSource()==u||e.getSource()==p||e.getSource()==s||e.getSource()==serverport)     {         username = this.u.getText();         passwords = this.p.getText();         if (serverport.getText().equals(""))         {           pp = 5555;         }         else           pp = Integer.parseInt(this.serverport.getText());         if (username.equals(""))         {           JOptionPane.showMessageDialog(this,"请输入用户名!","信息提示",JOptionPane.ERROR_MESSAGE);           return ;         }     if(this.checkPass(passwords).equals(new Boolean(true)));     {       MainBord mb = new MainBord(600,400,"JAVA爱好者聊天室  当前用户: "+username,username,s.getText(),pp);       Thread t1 = new Thread(mb);       t1.start();       mb.setVisible(true);       mb.setDefaultCloseOperation(EXIT_ON_CLOSE);       this.setVisible(false);     }     }     else if (e.getSource()==cancle)     {     this.dispose();     }   }   public Boolean checkPass(String pass)   {     return new Boolean(true);   } } //==========================程序结束============================// 4.3.4 客户端对象 设计思想: (1)先总体设计该类,将该类封装为一个客户端,向用户提供连接服务器、接收消息、发送消息等功能。 (2)在连接上服务器后,会创建该类的一个实例,代表一个客户端。利用该客户端进行所有的客户活动。 (3)提供receiveMessage()、sendMessage(Stringmsg)方法,进行接收消息和发送消息。同时在发送消息时进行一些错误控制如不能发送空消息等。 //=============================程序开始=========================// //DBC Client.java import java.io.*; import java.net.*; import javax.swing.*; class Client {   private static int PORT=5555;   private Socket s;   private BufferedReader in;   private PrintWriter out;   private String username;   private String servername;   private int port;   JTextArea jTextArea1 = new JTextArea();   JButton jButton1 = new JButton();   public Client(String name,String servername,int port)   {     username = name;     this.servername = servername;     this.port = port;     try {       InetAddress addr = InetAddress.getByName(servername);       s = new Socket(addr,port);       JOptionPane.showMessageDialog(new JWindow(),"已连接服务器!"+s,"连接成功",JOptionPane.INFORMATION_MESSAGE);       in = new BufferedReader(new InputStreamReader(s.getInputStream()));       out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(             s. getOutputStream())), true);       out.println(username);       System.out.println(username);     }catch (UnknownHostException ue) {       JOptionPane.showMessageDialog(new JWindow(),"出现错误:未知主机..."+ue.getMessage(),"聊天错误",JOptionPane.ERROR_MESSAGE);     }catch (NullPointerException npe){       JOptionPane.showMessageDialog(new JWindow(),"出现错误:服务器未开启..."+npe.getMessage(),"连接错误",JOptionPane.ERROR_MESSAGE);     }catch (IOException e) {     }   }   public String receiveMessage() throws Throwable   {     try {       while (true)       {         if (s.isClosed())         {           throw(new Throwable());         }         String str="";         str =in.readLine();         return  str;       }     }catch(IOException e)     {       System.out.println("读取数据错误...");       throw(new Throwable());     }catch(Throwable t){       throw(new Throwable());     }   }   public  void sendMessage(String str)   {     if (str.equals(""))     {       JOptionPane.showMessageDialog(new JWindow(),"不能发送空消息!","聊天提示", JOptionPane.ERROR_MESSAGE);       return;     }   out.println(username+"  说:  "+str);   }   public Client() {     try {       jbInit();     }     catch(Exception e) {       e.printStackTrace();     }   }   private void jbInit() throws Exception {     jButton1.setText("jButton1");     jTextArea1.setText("jTextArea1");   } } //==============================程序结束=========================// 4.3.5 聊天室主界面 设计思想: (1)用户登陆成功后的主操作界面,提供聊天信息发送、聊天信息显示、显示在线用户、退出、重登陆、隐身等功能(注意,某些功能未实现,读者可以在此基础上添加)。 (2)在该类主要封闭了聊天信息的具体显示、在线用户的刷新等功能的实现。 (3)注意该线程实现了Runnable接口,提供多线程服务。 //===========================程序开始==========================// //DBC MainBord.java文件 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MainBord extends JFrame implements ActionListener,Runnable {   private static JLabel[] totalu;   private static int num;   private String username;   private String servername;   private  int width,height;   private String title;   JFrame top;   JFrame bottom;   JFrame menu;   JFrame user;   Container topc;   Container menuc;   Container bottomc;   Container c;   Container u;   JTextArea messagearea;   JTextArea userarea;   JScrollPane textAreaScrollPane;   JLabel tishi;   JTextField mess;   JButton send;   JButton ying;   JButton cancle;   JButton login;   JButton reg;   Client client;   MultiJabberServer server;   public MainBord(int width,int height,String title,String name,String servername,int port)   {     totalu = new JLabel[100];     num = 0;     username = name;     this.servername = servername;     this.width = width;     this.height = height;     this.title = title;     top = new JFrame();     bottom = new JFrame();     menu = new JFrame();     user =new JFrame();     topc = top.getContentPane();     bottomc = bottom.getContentPane();     menuc = menu.getContentPane();     c = this.getContentPane();     u = user.getContentPane();     topc.setLayout(new BorderLayout());     bottomc.setLayout(new BorderLayout());     menuc.setLayout(new GridLayout());     c.setLayout(new BorderLayout());     u.setLayout(new BorderLayout());     tishi = new JLabel("消息:");     mess = new JTextField();     send = new JButton("发送");     messagearea = new JTextArea();     messagearea.setEditable(false);     textAreaScrollPane = new JScrollPane(messagearea);     ying = new JButton("隐身");     cancle = new JButton("退出");     login = new JButton("登陆");     reg = new JButton("注册");     userarea = new JTextArea(10,10);     userarea.setBackground(new Color(180,180,180));     userarea.setForeground(new Color(150,180,150));     userarea.setLayout(new GridLayout(20,1));     client = new Client(username,servername,port);     menuc.add(ying);     menuc.add(cancle);     menuc.add(login);     menuc.add(reg);     topc.add(textAreaScrollPane,BorderLayout.CENTER);     topc.add(menuc,BorderLayout.NORTH);     bottomc.add(tishi,BorderLayout.WEST);     bottomc.add(mess,BorderLayout.CENTER);     bottomc.add(send,BorderLayout.EAST);     u.add(new JButton("当前在线用户"),BorderLayout.NORTH);     u.add(userarea,BorderLayout.CENTER);     c.add(topc,BorderLayout.CENTER);     c.add(bottomc,BorderLayout.SOUTH);     //c.add(menuc,BorderLayout.NORTH);     c.add(u,BorderLayout.EAST);     setSize(width,height);     this.setTitle(title);     mess.addActionListener(this);     send.addActionListener(this);     cancle.addActionListener(this);     this.setDefaultCloseOperation(EXIT_ON_CLOSE);   }   public void actionPerformed(ActionEvent e)         {           if((e.getSource()==mess)||(e.getSource()==send))                 {                         String message=mess.getText();                         mess.setText("");                         try                         {                                 client.sendMessage(message);                         }                         catch(Throwable ex)                         {                             JOptionPane.showMessageDialog(this,"信息发送出现错误:"+ex.getMessage(),"聊天错误",JOptionPane.ERROR_MESSAGE);                         }                 }         else if(e.getSource()==cancle)         {           JOptionPane.showMessageDialog(this,"客户端将关闭!","[信息提示]", JOptionPane.CLOSED_OPTION);           this.dispose();         }         }   public void run()         {           String mess;           while(true)             {               try               {                 mess = client.receiveMessage();                 System.out.println(mess);                 if (mess.equals("refreshUsers"))                 {                   refreshUser(client.receiveMessage(),totalu,num);                   num++;                 }                 else                   messagearea.append(mess+"\n");               }catch(Throwable te){                 JOptionPane.showMessageDialog(this,"服务器已关闭!","聊天错误", JOptionPane.ERROR_MESSAGE);                 break;               } textAreaScrollPane.getVerticalScrollBar().setValue(textAreaScrollPane.getVerticalScrollBar().getMaximum());             }         }   public static void main(String [] args)   {   }   public void refreshUser(String username, JLabel[] j,int k)   { //    for(int i = 0;i 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载     本软件系统的测试阶段可分为:单元测试、集成测试、确认测试、系统综合测试和系统验收。每个阶段都要经历测试需求分析、测试过程设计、测试实现、测试实施、测试评价、测试维护六个步骤。如表4-1所示: 阶段 标识 被测对象 目的 完成后产品状态 单元测试 UT 服务器启动程序 可启动服务器 显示服务以启动 集成测试 CI 服务器启动程序服务器端程序 客房端程序 登录对话框程序聊天室主界面程序 集成各部分都可以正常运行 各程序组件运行正常 确认测试 SV 服务器启动程序服务器端程序 客房端程序 登录对话框程序聊天室主界面程序 确认部件的功能和性能 其各种程序中的功能完整可用 系统综合测试 SI 子系统 系统 各系统间的联系操作功能 客户和服务可以正常发信息 系统验收测试 SA 服务器启动程序服务器端程序 客房端程序 登录对话框程序聊天室主界面程序 客户来确认系统的功能和性能 达到用户要求的功能和性能 4.5 UML分析 图4-10为MultiJabberServer类的UML图: 图4-10 MultiJabberServer类的UML图 图4-11为ServeroneJabber类的UML分析图: 图4-11 ServeroneJabber类的UML分析 图4-12 TotalClient类的UML分析 下面的是服务器主界面的UML分析图。 图4-13 StartServer类的UML分析 图4-14 StartServer类的UML分析 图4-15 StartServer类的UML分析 下面的是登陆界面的UML分析图: 图4-16 LoginFrame类的UML分析 图4-17是聊天室主界面程序UML分析图: 图4-17 MainBord类的UML分析 图4-18 MainBord类的UML分析 下面是客户端界面的UML分析图: 图4-19 Client类的UML分析 4.6 聊天室使用 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 1.聊天室程序 本聊天室程序主要包含已编译Client.class客户端程序,LoginFrame.class登录对话框程序,MainBord.class聊天室主界面程序,MultiJabberServer.class服务器端程序,StartServer.class服务器启动程序,TotalClient.class统计在线人数程序,ServeoneJabber.class服务器端调用客户端程序,如图4-20所示: 图4-20聊天室程序 2.运行服务器端 (1)将上述提到的聊天室程序放置在C:\java文件夹下,在“开始”/“运行”中输入cmd,回车后进入到DOS环境下,如图4-21所示: 图4-21进入DOS界面 (2)在DOS界面下进入到存放聊天室程序的java文件夹下。如图4-22所示: 图4-22进入到存放聊天室程序的java文件夹 (3)JavaStartServer启动服务器端,如图4-23所示: 图4-23启动服务器端 (4)启动聊天室服务器端,下图为聊天室服务器端界面。如图4-24所示: 图4-24聊天室服务器端界面 3.服务器端功能介绍 (1)单击启动服务器按扭会出现启动服务器信息。 (2)单击启动客户端按扭,可以在服务器端生成客户端登录界面。 (3) 系统广播可以向聊天室内发送系统消息,即聊天室内所有用户都可以看到,如图4-25所示: 图4-25聊天室内发送系统消息 4.启动服务器 单击聊天室服务器端启动服务器按扭,可以启动服务器。如图4-26所示,点击“确定”按扭来确定启动聊天室服务器。 图4-26启动服务器对话框 5.运行客户端 (1)在DOS环境下通过java LoginFrame启动客户端程序。如图4-27所示: 图4-27启动客户端程序 (2)启动客户端程序后,会出现如下图所示登录对话框。如图4-28所示: 图4-28登录对话框 6.登录信息 服务器栏要填写要连接的服务器信息,如IP地址,主机名等,端口栏中要填写端口号,本聊天室固定端口号为5555,用户名栏中要填写用户名,即账号,密码栏中填写用户名密码,在这里可填也可不填,因为本聊天室没有做验证部分,如图4-29所示,我们要连接的服务器IP是192.168.1.32,登录用户名为sunshine。 图4-29登录信息 填写完登录信息好,点击“确定”按扭确定登录,系统会提示连接信息,如图4-30所示,连接成功,连接信息为服务器IP为192.168.1.32,服务器端端口为5555,本机连接端口为1122。 图4-30连接对话框 7.客户端功能介绍 通过登录后,将进入到聊天室主界面,这时系统将自动向整个聊天室发出广播提示我们的登录信息,同时在当前在线用户栏中也会出现我们的用户,如图4-31所示: 图4-31聊天室主界面 8.进行聊天 通过在消息栏中输入要发 送的信息,点击“发送”按扭或直接按回车键发送消息。 如图4-32所示,用户sunshine发送了“大家好”的信息。 图4-32客户端发送消息 服务器端也可参与到聊天中,如图4-33所示,服务器端向聊天室发送了“sunshine你好”的消息。注意服务端发送的消息都为系统广播,即系统消息。如图4-33所示: 图4-33服务器端发送系统消息 9.退出聊天室 点击聊天室顶部的按扭,将会出现退出对话框,点击确定后,退出聊天室。如图4-34所示: 图4-34退出对话框 10.常见问题 (1)在服务器未启动的情况下,用户能够正常登录服务器,但无法发送消息,无法显示在线用户信息,如下图所示,当前在线用户没有显示用户,用户登录时没有系统提示,在消息栏中写入内容无法发送消息。如图4-35所示: 图4-35非正常登录界面 (2)解决方法是在服务器端启动服务器,点击服务器界面上的按扭,启动服务器,然后用户重新登录就可解决以上问题。 (3)在聊天过程中不能发送空消息,我们在聊天室消息栏中未输入消息的情况下直接发送消息,将会出现如图4-36所示报错对话框。 图4-36系统报错信息 4.7 本章小结 上面对这个聊天室的开发和运用做了详细的说明,通过这个聊天室系统的开发我们不单单只是学会了怎么运用这个聊天室,也应该对Java的程序语言用了一定的了解,以及对JBuilder的使用有了进一步的实际运用,尤其是Jbuilder debug的运用尤为重要,其中的反编译UML图也可以帮助我们大家更好的学习和运用本程序。
本文档为【聊天室系统的开发】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_601191
暂无简介~
格式:doc
大小:578KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-20
浏览量:18