简单的聊天系统

    xiaoxiao2021-12-14  46

    界面:

    package com.lovo.socketgui; import java.awt.Color; import java.awt.Container; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.UnknownHostException; import java.util.Properties; import java.util.Set; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class FlySpringFrame extends JFrame {     private static Properties props;     private Container contentP;     private JScrollPane scorollP;     private JTextArea msgAre;     private JTextField inputTxt;     private JButton sendBtn;     private JComboBox ipCom;     private JButton clearBtn;     private JCheckBox autoBackChoice;     private JTextField autoBackTxt;     private ServerSocket ss;     static {         props = new Properties();         try {             props.load(new FileInputStream("name1.properties"));         } catch (FileNotFoundException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     }     public FlySpringFrame() {         Toolkit tk = Toolkit.getDefaultToolkit();         this.setTitle("我的飞春");         // 设置窗体位置         this.setLocation(((int) tk.getScreenSize().getWidth() - 500) / 2,                 ((int) tk.getScreenSize().getHeight() - 400) / 2);         // 设置窗体大小         this.setSize(500, 400);         // 设置窗体大小不可变         this.setResizable(false);         // 设置关闭         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         this.addContent();         this.setVisible(true);         // 服务器监听         try {             ss = new ServerSocket(9527);             while (true) {                 Socket socket = ss.accept();                 new ProcessThread(socket, this.msgAre, this.autoBackChoice,                         this.autoBackTxt).start();             }         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } finally {             try {                 ss.close();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }     }     private void addContent() {         // TODO Auto-generated method stub         this.contentP = this.getContentPane();         this.contentP.setBackground(Color.WHITE);         this.contentP.setLayout(null);         this.msgAre = new JTextArea();         this.scorollP = new JScrollPane(this.msgAre);         this.scorollP.setBounds(20, 20, 460, 250);         this.contentP.add(this.scorollP);         this.msgAre.setEditable(false);         this.inputTxt = new JTextField();         this.inputTxt.setBounds(20, 300, 200, 30);         this.contentP.add(this.inputTxt);         this.sendBtn = new JButton("发送");         this.sendBtn.setBounds(240, 300, 60, 30);         this.contentP.add(this.sendBtn);         this.sendBtn.addActionListener(new ActionListener() {             public void actionPerformed(ActionEvent e) {                 // TODO Auto-generated method stub                 String input = inputTxt.getText();                 inputTxt.setText("");                 if (input == null || input.trim().equals("")) {                     JOptionPane.showMessageDialog(contentP, "不能发送空消息");                 } else {                     input = "胡老师&" + input;                     Socket sendSocket = null;                     try {                         String name = ipCom.getSelectedItem().toString();                         String ip = props.getProperty(name);                         if (ip == null || ip.equals("")) {                             ip = name;                                                      }                         if (!ip.matches("(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])")) {                             input = "友情提示&请输入有效的IP地址或在好友列表中选择好友";                             ipCom.setSelectedIndex(0);                         } else {                             sendSocket = new Socket(ip, 9527);                             BufferedWriter bw = new BufferedWriter(                                     new OutputStreamWriter(sendSocket                                             .getOutputStream()));                             bw.write(input);                             bw.flush();                         }                         msgAre.append(input.split("&")[0] + "说:"                                 + input.split("&")[1] + "\n");                     } catch (UnknownHostException e1) {                         // TODO Auto-generated catch block                         e1.printStackTrace();                     } catch (IOException e1) {                         // TODO Auto-generated catch block                         e1.printStackTrace();                     } finally {                         if (sendSocket != null) {                             try {                                 sendSocket.close();                             } catch (IOException e1) {                                 // TODO Auto-generated catch block                                 e1.printStackTrace();                             }                         }                     }                 }             }         });         Set allKey = props.keySet();         Object[] allNames = allKey.toArray();         this.ipCom = new JComboBox(allNames);         this.ipCom.setBounds(320, 300, 100, 30);         this.ipCom.setEditable(true);         this.contentP.add(this.ipCom);         this.clearBtn = new JButton("清屏");         this.clearBtn.setBounds(430, 300, 60, 30);         this.contentP.add(this.clearBtn);         this.clearBtn.addActionListener(new ActionListener() {             public void actionPerformed(ActionEvent e) {                 msgAre.setText("");             }         });         this.autoBackChoice = new JCheckBox("自动回复");         this.autoBackChoice.setBounds(20, 340, 80, 30);         this.autoBackChoice.addItemListener(new ItemListener() {             public void itemStateChanged(ItemEvent e) {                 if (autoBackChoice.isSelected()) {                     autoBackTxt.setEditable(true);                 } else {                     autoBackTxt.setEditable(false);                 }             }         });         this.contentP.add(this.autoBackChoice);         this.autoBackTxt = new JTextField("我不在,请稍后联系");         this.autoBackTxt.setBounds(120, 340, 200, 30);         this.autoBackTxt.setEditable(false);         this.contentP.add(this.autoBackTxt);     } }

    线程:

    package com.lovo.socketgui; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.JCheckBox; import javax.swing.JTextArea; import javax.swing.JTextField; public class ProcessThread extends Thread {     private Socket socket;     private JTextArea msgArea;     private JCheckBox autoBackChoice;     private JTextField autoBackTxt;     public ProcessThread(Socket socket, JTextArea msgArea,JCheckBox autoBackChoice,JTextField autoBackTxt) {         this.socket = socket;         this.msgArea = msgArea;         this.autoBackChoice = autoBackChoice;         this.autoBackTxt = autoBackTxt;     }     public void run() {         BufferedReader br;         try {             br = new BufferedReader(new InputStreamReader(socket                     .getInputStream()));             String msg = br.readLine();             String[] allMsg = msg.split("&");             msgArea.append(allMsg[0] + "("                     + socket.getInetAddress().getHostAddress() + "):"                     + allMsg[1] + "\n");             msgArea.setCaretPosition(msgArea.getText().length());// 自动跳到最后位置             // 自动回复             if(this.autoBackChoice.isSelected()){                 this.autoReturn();             }         } catch (IOException e) {             // TODO Auto-generated catch block             e.printStackTrace();         } finally {             try {                 socket.close();             } catch (IOException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }         }     }     public void autoReturn() { //        int num = (int) (Math.random() * 3) + 1; //        String backMsg = ""; //        switch (num) { //        case 1: //            backMsg = "胡老师&你好,我正在忙,请稍后再联系!"; //            break; //        case 2: //            backMsg = "胡老师&真的是你吗?"; //            break; //        case 3: //            backMsg = "胡老师&好的,我知道了!"; //        }         String backMsg = this.autoBackTxt.getText();         if(backMsg.trim().equals("")){             backMsg = "我不在,请稍后联系";         }         backMsg = "胡老师&" + backMsg;         String address = this.socket.getInetAddress().getHostAddress();         if (!address.equals("127.0.0.1")) {             Socket sendSocket = null;             try {                 sendSocket = new Socket(address, 9527);                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(                         sendSocket.getOutputStream()));                 bw.write(backMsg);                 bw.flush();             } catch (UnknownHostException e1) {                 // TODO Auto-generated catch block                 e1.printStackTrace();             } catch (IOException e1) {                 // TODO Auto-generated catch block                 e1.printStackTrace();             } finally {                 try {                     sendSocket.close();                 } catch (IOException e1) {                     // TODO Auto-generated catch block                     e1.printStackTrace();                 }             }         }     } }

    测试:

    package com.lovo.test; import com.lovo.socketgui.FlySpringFrame; public class TestMain {     /**      * @param args      */     public static void main(String[] args) {                  new FlySpringFrame();                   //        String regex = "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))"; //        String ip = JOptionPane.showInputDialog(""); //        if(ip.matches(regex)){ //            JOptionPane.showMessageDialog(null, "Success"); //        }else{ //            JOptionPane.showMessageDialog(null, "Failed"); //        }     } }

    转载请注明原文地址: https://ju.6miu.com/read-963165.html

    最新回复(0)