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

📄 client.java

📁 java聊天系统
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
public class Client extends JFrame implements ActionListener{
    JPanel panelLogin;
    JPanel panelBack;
    JPanel panelTalk;
    JLabel labelServerIP;
    JLabel labelName; 
    JLabel labelPassword;
    JTextArea textViewTalk;
    JLabel labelTalk;
    JLabel labelTo;
    JTextField textTalk;
    JTextField textServerIP; 
    JTextField textName;  
    JPasswordField textPassword;
    JButton buttonTalk;
    JButton buttonLogin;
    JButton buttonReg;
    JComboBox listOnline;
    GridBagLayout gl;
    BorderLayout bdl;
    GridBagConstraints gbc;	
    JDialog dialogLogin=new JDialog(this,"Login",true);
    Socket socket;
    BufferedReader in;
    PrintWriter out;
    String strSend, strReceive, strKey, strStatus;
    private StringTokenizer st;
    public Client(){//初始化
        gl = new GridBagLayout();
        bdl = new BorderLayout();
        gbc = new GridBagConstraints();
        panelBack = (JPanel)getContentPane();
        panelBack.setLayout(bdl);
        panelLogin = new JPanel();
        panelLogin.setLayout(gl);
        //初始化控件
        labelServerIP = new JLabel("Server IP:");
        labelName = new JLabel("UserName:");
        labelPassword = new JLabel("Password:");
        textServerIP = new JTextField(12);
        textName = new JTextField(12);
        textPassword = new JPasswordField(12);
        buttonLogin=new JButton("Login");
        buttonTalk = new JButton("Send");
        buttonReg =new JButton("Register");        
        labelTalk = new JLabel("Talk :");
        labelTo = new JLabel(" To :");
        textTalk = new JTextField(30);
        panelTalk = new JPanel();
        textViewTalk = new JTextArea(18,40);
        listOnline = new JComboBox();        
        buttonLogin.addActionListener(this);
        buttonTalk.addActionListener(this);
        buttonReg.addActionListener(this);        
        listOnline.addItem("All");      	
        panelTalk.add(labelTalk);
        panelTalk.add(textTalk);
        panelTalk.add(labelTo);
        panelTalk.add(listOnline);
        panelTalk.add(buttonTalk);
        panelBack.add("Center",textViewTalk);
        panelBack.add("South",panelTalk);
        buttonTalk.setEnabled(false);
        setSize(600,450);
        show();
        // 登陆对话框初始化
        dialogLogin.getContentPane().setLayout(new FlowLayout());
        dialogLogin.getContentPane().add(labelServerIP);
        dialogLogin.getContentPane().add(textServerIP);
        dialogLogin.getContentPane().add(labelName);
        dialogLogin.getContentPane().add(textName);
        dialogLogin.getContentPane().add(labelPassword);
        dialogLogin.getContentPane().add(textPassword);
        dialogLogin.getContentPane().add(buttonLogin);
        dialogLogin.getContentPane().add(buttonReg);
        dialogLogin.setBounds(300,300,250,200);
        dialogLogin.show();
    }
    public static void main(String[] args){
        new Client();
    }
    //建立与服务端通信的套接字
    void connectServer(){
        try{
            socket=new Socket(textServerIP.getText(),8049); 
            in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
        }
        catch(ConnectException e){
            JOptionPane.showMessageDialog(this,"连接服务器失败!","ERROE", JOptionPane.
INFORMATION_MESSAGE);
            textServerIP.setText("");
            System.out.println(e);
        }
        catch(Exception e){
            System.out.println(e);
        }
    }
    // 弹出窗口
public void popWindows(String strWarning,String strTitle){
JOptionPane.showMessageDialog(this,strWarning,strTitle,JOptionPane.INFORMATION_MESSAGE);
    }
    private void initLogin() throws IOException{
        strReceive = in.readLine();
        st = new StringTokenizer(strReceive,"|");
        strKey = st.nextToken();
        if(strKey.equals("login")){
            strStatus = st.nextToken();
            if(strStatus.equals("succeed")){
                buttonLogin.setEnabled(false);
                buttonTalk.setEnabled(true);
                panelLogin.setVisible(false);
                dialogLogin.dispose();
                new ClientThread(socket);
                out.println("init|online");
            }
            popWindows(strKey+" "+strStatus+"!","Login");
        }
        if(strKey.equals("warning")){
            strStatus = st.nextToken();
            popWindows(strStatus,"Register");
        }
    }
    public void actionPerformed(ActionEvent evt){
        Object obj=evt.getSource();
        try{
            if(obj==buttonLogin){
                if((textServerIP.getText().length()>0)&&(textName.getText().length()>0)
&&(textPassword.getText().length()>0)){
                    connectServer();
                    strSend = "login|"+textName.getText()+"|"+String.valueOf
(textPassword.getPassword());
                    out.println(strSend);
                    initLogin();
                }
                else{
                    popWindows("将输入完整信息","ERROE");
                }
            }
            else if(obj==buttonReg){
                if((textName.getText().length()>0)&&(textPassword.getText().length()>0)){
                    connectServer();
                    strSend="reg|"+textName.getText()+"|"+String.valueOf
(textPassword.getPassword());
                    out.println(strSend);
                    initLogin();
                }
            }
            else if(obj==buttonTalk){
                if(textTalk.getText().length()>0){
                    out.println("talk|"+textTalk.getText()+"|"+textName.getText()+"|"+
listOnline.getSelectedItem().toString());
                    textTalk.setText("");
                }
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    class ClientThread implements Runnable {
        private Socket socket;
        private BufferedReader in;
        private PrintWriter out;
        private String strReceive, strKey; 
        private Thread threadTalk;
        private StringTokenizer st;   
        public ClientThread(Socket s) throws IOException{
            this.socket = s;
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            threadTalk = new Thread(this);
            threadTalk.start();
        }
        public void run(){
            while(true){
                synchronized(this){
                    try{
                        strReceive = in.readLine();
                        st = new StringTokenizer(strReceive,"|");
                        strKey = st.nextToken();
                        if(strKey.equals("talk")){
                            String strTalk = st.nextToken();
                            strTalk = textViewTalk.getText()+"\r\n   "+strTalk;
                            textViewTalk.setText(strTalk);
                        }
                        else if(strKey.equals("online")){
                            String strOnline;
                            while(st.hasMoreTokens()){
                                strOnline=st.nextToken();
                                listOnline.addItem(strOnline);
                            }
                        }
                        else if(strKey.equals("remove")){
                            String strRemove;
                            while(st.hasMoreTokens()){
                                strRemove=st.nextToken();
                                listOnline.removeItem(strRemove);
                            }
                        }
                        else if(strKey.equals("warning")){
                            String strWarning = st.nextToken();
                            popWindows(strWarning,"Warning");
                        }
                        Thread.sleep(1000);
                    }
                    catch(InterruptedException e){}
                    catch(IOException e){}
                }
            }
        }
    }
}

⌨️ 快捷键说明

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