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

📄 logindialog.java~52~

📁 Java 聊天程序 有客户端和服务端。
💻 JAVA~52~
📖 第 1 页 / 共 3 页
字号:
                socket = null;
                name = null;
            }
        }
    }

    //send方法用于向服务器发送消息
    private void send(String msg) {
        try {
            dos.writeUTF(msg);
            dos.flush();
        }
        catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    //用于用户登录
    public class Listen extends Thread {
        public Listen(String n) {
            //设定当前客户的名字
            name = n;
        }

        //Listen类的run方法不断接收和处理服务器发送来的消息
        public void run() {
            String message = null;
            while (true) {
                //无限循环用于监听信息
                try {
                    message = dis.readUTF();
                    //读取服务器传来的信息
                }
                catch (IOException e) {
                    e.printStackTrace();
                    disconnect();
                    stop();
                }
                if (message == null) {
                    //如果服务器传来的信息为空,则断开此次连接
                    listen = null;
                    socket = null;

                    return;
                }
                //用StringTokenizer类来实现读取分段字符
                StringTokenizer str =
                    new StringTokenizer(message, ":");
                //读取信息头来识别试何种信息
                String keyword = str.nextToken();

                if (keyword.equalsIgnoreCase("PEOPLE")) {
                    //如果读取的是PEOPLE,则表示是服务器发送的客户连接信息,
                    //此时,需要刷新客户端的用户列表
                    count = 0;
                    while (str.hasMoreTokens()) {
                        //读取加入的用户名称
                        String st = str.nextToken();
                        count++; //统计用户数目
                    }

                }
                else if (keyword.equalsIgnoreCase("QUIT")) {
                    //如果关键字是QUIT,则判断是服务器的关闭信息,
                    String who = str.nextToken();
                    //判断是否为服务器
                    if (who.equalsIgnoreCase("SERVER")) {
                        JOptionPane.showMessageDialog(null, "服务器关闭!\n", "错误",
                            JOptionPane.ERROR_MESSAGE);

                        try {
                            listen = null;
                            socket.close();
                            socket = null;
                            stop();
                        }
                        catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                }
                else if (keyword.equalsIgnoreCase("WELCOME")) {
                    //WELCOME表示登录成功
                    ClientFrame cf = new ClientFrame(socket, dis, dos, name);
                    Center.CenterWindow(cf);
                    cf.setVisible(true);
                    //关闭登录框
                    disposeDialog();
                    //停止登录窗口的listen类
                    this.stop();

                }
                else if (keyword.equalsIgnoreCase("FAULTNAME")) {
                    //FAULTNAME表示登录失败
                    JOptionPane.showMessageDialog(null, "" + name +
                                                  ",登录失败!\n用户名或密码错误", "错误",
                                                  JOptionPane.ERROR_MESSAGE);
                    //如果socket和name不为null,则初始为null
                    if (socket != null) {
                        try {
                            socket.close();
                            socket = null;
                            name = null;
                            //停止登录窗的listen类
                            this.stop();
                        }
                        catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        } //结束run方法
    } //结束内部的Listen类

    //用于监听号码注册,重设密码,修改密码
    class listen2 extends Thread {
        public void run() {
            String messg = null;
            while (true) {
                try {
                    messg = dis.readUTF();
                }
                catch (IOException ex) {
                    stop();
                }
                if (messg == null) {
                    //如果服务器传来的信息为空,则断开此次连接
                    listen = null;
                    socket = null;

                    return;
                }
                StringTokenizer str =
                    new StringTokenizer(messg, ":");
                //用StringTokenizer类来实现读取分段字符
                String keyword = str.nextToken();
                if (keyword.equalsIgnoreCase("REGISTEROK")) {
                    String number = str.nextToken();
                    JOptionPane.showMessageDialog(null,
                                                  "你的帐号:" + number +
                                                  "\n牢记你的号码、密码及密码保护",
                                                  "注册成功",
                                                  JOptionPane.
                                                  INFORMATION_MESSAGE);
                    //成功后初始为null
                    listen = null;
                    socket = null;
                    userID.setText(number);
                    rege.setVisible(false);
                    panel1.setVisible(true);
                }
                else if (keyword.equalsIgnoreCase("REGISTERFALSE")) {
                    JOptionPane.showMessageDialog(null, "注册失败,请重新注册!", "注册失败",
                                                  JOptionPane.ERROR_MESSAGE);
                    //失败后初始null
                    listen = null;
                    socket = null;

                }
                else if (keyword.equalsIgnoreCase("AMENDOK")) {
                    JOptionPane.showMessageDialog(null, "密码重设成功!", "恭喜",
                                                  JOptionPane.
                                                  INFORMATION_MESSAGE);
                    //成功后初始为null
                    listen = null;
                    socket = null;
                    forgetNumber.setText("");
                    forgetPasswordA.setText("");
                    forgetPassword1.setText("");
                    forgetPassword2.setText("");
                    forget.setVisible(false);
                    panel1.setVisible(true);
                }
                else if (keyword.equalsIgnoreCase("AMENDFALSE")) {
                    JOptionPane.showMessageDialog(null,
                                                  "密码重设失败!\n请你检查\n1.号码是否正确\n2.密码保护是否正确",
                                                  "错误",
                                                  JOptionPane.ERROR_MESSAGE);
                    //失败后初始null
                    listen = null;
                    socket = null;

                }
                else if (keyword.equalsIgnoreCase("XIUGAIOK")) {
                    JOptionPane.showMessageDialog(null, "密码修改成功!", "恭喜",
                                                  JOptionPane.
                                                  INFORMATION_MESSAGE);
                    //成功后初始为null
                    listen = null;
                    socket = null;
                    jTextField1.setText("");
                    jPasswordField1.setText("");
                    jPasswordField2.setText("");
                    jPasswordField3.setText("");
                    jPanel5.setVisible(false);
                    panel1.setVisible(true);
                }
                else if (keyword.equalsIgnoreCase("XIUGAIFALSE")) {
                    JOptionPane.showMessageDialog(null,
                                                  "密码修改失败!\n请你检查\n1.号码是否正确\n2.旧密码是否正确\n3.你还可以通过密码重设来修改密码",
                                                  "错误",
                                                  JOptionPane.ERROR_MESSAGE);
                    //失败后初始null
                    listen = null;
                    socket = null;
                }

            }
        }
    }

    //关闭窗口构造方法
    public void disposeDialog() {
        this.dispose();
    }

    //登录键
    public void jButton1_actionPerformed(ActionEvent e) {

        if (userID.getText().trim().equals("")) {
            JOptionPane.showMessageDialog(null, "号码不可为空", "警告",
                                          JOptionPane.WARNING_MESSAGE);
        }
        else {
            if (socket == null) {

                try {
                    //与服务器建立连接  端口 5555
                    socket = new Socket
                        (InetAddress.getLocalHost(), 5555);
                    if (socket != null) {
                        try {
                            //实例化两个数据流
                            dis = new DataInputStream
                                (socket.getInputStream());
                            //将dis指向socket的输入流
                            dos = new DataOutputStream
                                (socket.getOutputStream());
                            //将dos指向socket的输出流
                        }
                        catch (IOException ex) {
                            ex.printStackTrace();
                            disconnect();
                        }
                        StringBuffer info = new StringBuffer
                            ("PEOPLE:");

                        char[] chars = this.userPassword.getPassword();
                        String ps = new String(chars);
                        info.append(userID.getText() + ":" + ps + ":");

                        info.append(InetAddress.getLocalHost()
                                    .toString());
                        send(info.toString());
                        listen = new Listen(userID.getText());
                        listen.start();
                        //启动线程


                    }
                    else {
                        JOptionPane.showMessageDialog(this, "登录超时,服务器端无响应!\n",
                            "错误", JOptionPane.ERROR_MESSAGE);

                    }
                }
                catch (IOException ee) {
                    JOptionPane.showMessageDialog(this,
                                                  "登录超时,服务器端无响应!\n请稍候再试...",
                                                  "错误",
                                                  JOptionPane.ERROR_MESSAGE);
                    disconnect();

                }
            }
        }
    }

    public void jButton2_actionPerformed(ActionEvent e) {
        System.exit(0);
    }

    //注册
    public void jButton3_actionPerformed(ActionEvent e) {
        char[] ssg = Password1.getPassword();
        char[] sgs = Password2.getPassword();
        String a = new String(ssg);
        String b = new String(sgs);
        if (a.equals("")) {
            JOptionPane.showMessageDialog(null, "新密码不可为空!", "警告",
                                          JOptionPane.WARNING_MESSAGE);
        }
        else if (PasswordA.getText().equals("")) {
            JOptionPane.showMessageDialog(null, "密码保护不可为空!", "警告",
                                          JOptionPane.WARNING_MESSAGE);
        }
        else if (a.equals(b)) {
            if (socket == null) {
                try {
                    //与服务器建立连接  端口 5555
                    socket = new Socket
                        (InetAddress.getLocalHost(), 5555);
                    if (socket != null) {
                        try {
                            //实例化两个数据流
                            dis = new DataInputStream
                                (socket.getInputStream());
                            //将dis指向socket的输入流
                            dos = new DataOutputStream
                                (socket.getOutputStream());
                            //将dos指向socket的输出流
                        }
                        catch (IOException ex) {
                            ex.printStackTrace();
                            disconnect();
                        }
                        StringBuffer info = new StringBuffer
                            ("REGISTER");
                        info.append(":" + a);
                        info.append(":" + PasswordA.getText());
                        send(info.toString());
                        listen2 sg = new listen2();
                        sg.start();
                        //启动线程
                    }
                    else {
                        JOptionPane.showMessageDialog(this,
                            "请稍候再试...", "错误", JOptionPane.ERROR_MESSAGE);
                    }

                }
                catch (IOException ee) {
                    JOptionPane.showMessageDialog(this,
                                                  "连接超时,服务器端无响应!\n请稍候再试...",
                                                  "错误",
                                                  JOptionPane.ERROR_MESSAGE);
                    disconnect();
                }
            }
        }

        else {
            JOptionPane.showMessageDialog(null, "两次输入的密码不匹配!", "错误",
                                          JOptionPane.ERROR_MESSAGE);
        }
    }

    //密码重设取消
    public void jButton6_actionPerformed(ActionEvent e) {
        this.setTitle("用户登录");

⌨️ 快捷键说明

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