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

📄 clientjframe.java.svn-base

📁 多线程加密聊天室,支持多线程客户端链接服务器端
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
                        @Override                        public void run() {                            try {                                client = new Socket(jTextField1.getText(), 5000);                                in = client.getInputStream();                                out = client.getOutputStream();                                connectButton.setText("断开");                                isConnected = true;                            } catch (UnknownHostException ex) {                                chatContent.append("连接失败:找不到服务器\n");                                connectButton.setText("连接");                                return;                            } catch (IOException ex) {                                chatContent.append("连接失败:服务器可能没有打开\n");                                connectButton.setText("连接");                                return;                            }                            while (true) {                                int len;                                try {                                    byte[] buf = new byte[2048];                                    if ((len = in.read(buf)) != -1) {                                        byte[] c = new byte[len];                                        for (int i = 0; i < len; i++) {                                            c[i] = buf[i];                                        }                                        Packet p = (Packet) Packet.ByteToObject(clientAES.decrypt(c));                                        if (!p.isIntegrated()) {                                            chatContent.append("本条消息验证完整性失败\n");                                        }                                        if (p.getType().equals(Packet.PrivateKey)) {                                            try {                                                if (DSA.savePrikey(p.getContent(), userNameButton.getText())) {                                                    registerState = 1;                                                } else {                                                    registerState = -1;                                                }                                            } catch (Exception ex) {                                                ex.printStackTrace();                                            }                                        } else if (p.getType().equals(Packet.ResponeLogin)) {                                            chatContent.append("服务器" + client.getInetAddress().getHostName() + ":" + p.getStringContent() + "\n");                                            if (p.getStringContent().equals("登陆成功")) {                                                loginState = true;                                                loginButton.setVisible(false);                                                chatContent.append("登陆成功\n");                                                userName=userNameButton.getText();                                            } else {                                                chatContent.append("登陆失败\n");                                            }                                        } else {                                            if (!p.isIntegrated()) {                                                chatContent.append("服务器" + client.getInetAddress().getHostName() + "发来一条信息,但签名验证失败:" + p.getStringContent() + "\n");                                                continue;                                            }                                            chatContent.append("服务器公告:" + p.getStringContent());                                            chatContent.append("\n");                                        }                                        Thread.sleep(500);                                    } else {                                        throw new IOException();                                    }                                } catch (InvalidKeyException ex) {                                    Logger.getLogger(ClientJFrame.class.getName()).log(Level.SEVERE, null, ex);                                } catch (IllegalBlockSizeException ex) {                                    Logger.getLogger(ClientJFrame.class.getName()).log(Level.SEVERE, null, ex);                                } catch (BadPaddingException ex) {                                    Logger.getLogger(ClientJFrame.class.getName()).log(Level.SEVERE, null, ex);                                } catch (InterruptedException ex) {                                    try {                                        this.unConnectProcess();                                        ex.printStackTrace();                                        break;                                    } catch (IOException ex1) {                                        Logger.getLogger(ClientJFrame.class.getName()).log(Level.SEVERE, null, ex1);                                    }                                } catch (IOException e) {                                    try {                                        this.unConnectProcess();                                        e.printStackTrace();                                        break;                                    } catch (IOException ex) {                                        Logger.getLogger(ClientJFrame.class.getName()).log(Level.SEVERE, null, ex);                                    }                                }                            }                        }                    };            currentThread.start();        }}//GEN-LAST:event_connectButtonActionPerformed    private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendButtonActionPerformed        if (this.loginState) {            send(editArea.getText(), Packet.SignedMessage);            editArea.setText(null);        } else {            chatContent.append("系统信息:请登陆后发送消息,如果未注册请注册\n");        }}//GEN-LAST:event_sendButtonActionPerformed    private boolean register(String userName) {        try {            // TODO add your handling code here:            p = new Packet(Packet.RegisterMessage, userName.getBytes()); //把b经过HASH打包            byte[] ep = clientAES.encrypt(Packet.ObjectToByte(p)); //用AES加密包            out.write(ep);            while (registerState == 0) {                try {                    Thread.sleep(300);                } catch (InterruptedException ex) {                }            }            if (registerState == 1) {                return true;            }            return false;        } catch (IOException ex) {            System.out.println("注册中出现异常");        }        return false;    }    private void send(Object obj, String packetType) {        try {            if (packetType.equals(Packet.Message)) {                String str = (String) obj;                byte[] buf = str.getBytes();                p = new Packet(Packet.Message, buf);//把b经过HASH打包                byte[] ep = clientAES.encrypt(Packet.ObjectToByte(p));//用AES加密包                out.write(ep);                chatContent.append("本机发出的消息:" + str);                chatContent.append("\n ");            } else if (packetType.equals(Packet.RegisterMessage)) {                String str = (String) obj;                byte[] buf = str.getBytes();                p = new Packet(Packet.RegisterMessage, buf);//把b经过HASH打包                byte[] ep = clientAES.encrypt(Packet.ObjectToByte(p));//用AES加密包                out.write(ep);            } else if (packetType.equals(Packet.LoginMessage)) {                String str = (String) obj;                byte[] buf = str.getBytes();                p = new Packet(Packet.LoginMessage, userNameButton.getText(), userNameButton.getText().getBytes());//发出用户名                byte[] ep = clientAES.encrypt(Packet.ObjectToByte(p));//用AES加密包                out.write(ep);            }  else if (packetType.equals(Packet.SignedMessage)) {                String str = (String) obj;                byte[] buf = str.getBytes();                p = new Packet(Packet.SignedMessage,userName, buf);//把b经过HASH打包                byte[] ep = clientAES.encrypt(Packet.ObjectToByte(p));//用AES加密包                out.write(ep);                chatContent.append("本机发出的消息:" + str);                chatContent.append("\n ");            }        } catch (IOException ioe) {        }    }    private void regButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_regButtonActionPerformed        new Thread() {            @Override            public void run() {                if (userNameButton.getText().isEmpty()) {                    JOptionPane.showMessageDialog(regButton.getParent(), "请输入用户名");                } else if (register(userNameButton.getText())) {                    JOptionPane.showMessageDialog(regButton.getParent(), "注册成功,密钥已保存到程序目录下,请妥善保管");                } else {                    JOptionPane.showMessageDialog(regButton.getParent(), "注册失败,请更换用户名");                }            }        }.start();}//GEN-LAST:event_regButtonActionPerformed    private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loginButtonActionPerformed        // TODO add your handling code here:        send(userNameButton.getText(), Packet.LoginMessage);    }//GEN-LAST:event_loginButtonActionPerformed    /**     * @param args the command line arguments     */    public static void main(String args[]) {        java.awt.EventQueue.invokeLater(new Runnable() {            public void run() {                new ClientJFrame().setVisible(true);            }        });    }    // Variables declaration - do not modify//GEN-BEGIN:variables    private javax.swing.JTextArea chatContent;    private javax.swing.JButton connectButton;    private javax.swing.JTextArea editArea;    private javax.swing.JLabel jLabel1;    private javax.swing.JLabel jLabel2;    private javax.swing.JScrollPane jScrollPane1;    private javax.swing.JScrollPane jScrollPane2;    private javax.swing.JTextField jTextField1;    private javax.swing.JButton loginButton;    private javax.swing.JButton regButton;    private javax.swing.JButton sendButton;    private javax.swing.JTextField userNameButton;    // End of variables declaration//GEN-END:variables}

⌨️ 快捷键说明

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