📄 clientjframe.java.svn-base
字号:
@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 + -