⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servercontrol.java~1~

📁 一个用JAVA做的可以网络和单机聊天的程序
💻 JAVA~1~
📖 第 1 页 / 共 2 页
字号:
                } catch (IOException ex) {
                    flag = false;
                }
            }
        }
    }

    //发送客户列表信息
    public void sendList()
    {
        DefaultListModel dlm=(DefaultListModel) lstUsers.getModel();
        Enumeration em =dlm.elements();
        while (em.hasMoreElements()) {
            ClientBean cb = (ClientBean) em.nextElement();
            cb.getOut().println("list:"+dlm.toString());
        }

    }

    //发送群聊信息
    public void sendAll(String msg) {
        ((DefaultListModel) lstChat.getModel()).addElement(msg);
        Enumeration em = ((DefaultListModel) lstUsers.getModel()).elements();
        while (em.hasMoreElements()) {
            ClientBean cb = (ClientBean) em.nextElement();
            cb.getOut().println(msg);
        }
    }

    //发送私聊信息
    public void sendPrivate(String text, ClientBean cb) {
        ((DefaultListModel) lstChat.getModel()).addElement(text);
        cb.getOut().println(text);
    }

    //清空聊天信息
    public void btnClear_actionPerformed(ActionEvent e) {
        int choice = JOptionPane.showConfirmDialog(null, "确认清空聊天记录吗?", "提示",
                JOptionPane.OK_CANCEL_OPTION);
        if (choice == JOptionPane.OK_OPTION) {
            ((DefaultListModel) lstChat.getModel()).clear();
        }
    }

    //发送消息
    public void btnSend_actionPerformed(ActionEvent e) {
        //获得输入的信息内容
        String text = txtMsg.getText().trim();
        txtMsg.setText("");
        if (text.equals("")) {
            JOptionPane.showMessageDialog(null, "消息不能为空!");
        } else {
            //获得发送的类型
            int index = cmbType.getSelectedIndex();
            //索引为0代表是群聊
            if (index == 0) {
                String msg = "管理员对所有人说:" + text;
                sendAll(msg);
            }
            //否则是私聊
            else {
                Object obj = lstUsers.getSelectedValue();
                if (obj == null) {
                    JOptionPane.showMessageDialog(null, "私聊必须要选择一个客户");
                } else {
                    ClientBean cb = (ClientBean) obj;
                    String msg = "管理员对" + cb.getClientName() + "说:" + text;
                    sendPrivate(msg, cb);
                }
            }
        }
    }

    public boolean existsClientName(String clientName)
    {
        boolean flag=false;
        java.util.Enumeration emu=((DefaultListModel) lstUsers.getModel()).elements();
        while(emu.hasMoreElements())
        {
            ClientBean cb=(ClientBean)emu.nextElement();
            if(cb.getClientName().equals(clientName))
            {
                flag=true;
                break;
            }
        }
        return flag;
    }
    //客户端会话线程
    class ChatThread extends Thread {
        private Socket s;
        public ChatThread(Socket s) {
            this.s = s;
        }

        public void run() {
            try {
                PrintWriter out = new PrintWriter(s.getOutputStream(), true);
                BufferedReader br = new BufferedReader(new InputStreamReader(s.
                        getInputStream()));
                //获得客户端昵称
                String clientName = br.readLine();
                if(existsClientName(clientName))
                {
                    s.close();
                }else
                {
                        //创建客户端BEAN
                    ClientBean cb = new ClientBean(clientName, out, s);
                    //获得用户列表
                    DefaultListModel dlm = (DefaultListModel) lstUsers.getModel();

                    //将客户端添加到ServerControl界面
                    dlm.addElement(cb);
                    //欢迎词
                    String welcome = "☆☆★★★欢迎" + clientName + "来到JAVA聊天室★★★☆☆";
                    //向各客户端发送欢迎词
                    sendAll(welcome);
                    sendList();
                    //启动获取该客户端信息线程
                    new GetThread(br, cb).start();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }


    //获取客户端信息线程
    class GetThread extends Thread {
        private BufferedReader br;
        private ClientBean cb;
        private DefaultListModel dlm = (DefaultListModel) lstChat.getModel();

        public GetThread(BufferedReader br, ClientBean cb) {
            this.br = br;
            this.cb = cb;
        }

        public void run() {
            try {
                while (true) {
                    String text = br.readLine();
                    String[] content = text.split(":");
                    if (content[1].equals("all")) {
                        String msg = content[0] + "对所有人说:" + content[2];
                        sendAll(msg);
                    } else {
                        int index = Integer.parseInt(content[1]);
                        Object obj=lstUsers.getModel().getElementAt(index);
                        if(obj!=null)
                        {
                            ClientBean cb=(ClientBean)obj;
                            String msg=content[0]+"对"+cb.getClientName()+"说:"+content[2];
                            sendPrivate(msg,cb);
                        }
                    }

                }
            }
            //当客户端直接关闭窗体时,从JLIST直接移除该客户端信息
            catch (SocketException se) {
                if(flag)
                {
                    DefaultListModel dlm = (DefaultListModel) lstUsers.getModel();
                    //判断该客户端是否是被管理员踢出去的,如果不是就欢送
                    if (dlm.contains(cb)) {
                        dlm.removeElement(cb);
                        String goodbye = "<html>欢送" + cb.getClientName() +
                                         "离开聊天室</html>";
                        sendAll(goodbye);
                        sendList();
                    }
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

}


class ServerControl_btnSend_actionAdapter implements ActionListener {
    private ServerControl adaptee;
    ServerControl_btnSend_actionAdapter(ServerControl adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.btnSend_actionPerformed(e);
    }
}


class ServerControl_btnClear_actionAdapter implements ActionListener {
    private ServerControl adaptee;
    ServerControl_btnClear_actionAdapter(ServerControl adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.btnClear_actionPerformed(e);
    }
}


class ServerControl_btnSave_actionAdapter implements ActionListener {
    private ServerControl adaptee;
    ServerControl_btnSave_actionAdapter(ServerControl adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.btnSave_actionPerformed(e);
    }
}


class ServerControl_btnKick_actionAdapter implements ActionListener {
    private ServerControl adaptee;
    ServerControl_btnKick_actionAdapter(ServerControl adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.btnKick_actionPerformed(e);
    }
}


class ServerControl_btnStart_actionAdapter implements ActionListener {
    private ServerControl adaptee;
    ServerControl_btnStart_actionAdapter(ServerControl adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.btnStart_actionPerformed(e);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -