java简易多用户聊天室

来源:互联网 发布:paxos算法 应用 编辑:程序博客网 时间:2024/05/01 10:44

java Swing写的一个小Demo

Server

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.List;public class Server {    static Boolean start = true;    List<Client> clients = new ArrayList<Client>();    public static void main(String[] args) {        new Server().start();    }    public void start() {        Socket s = null;        ServerSocket serverSocket = null;        try {            serverSocket = new ServerSocket(8888);            while (start) {                s = serverSocket.accept();                Client client = new Client(s);                new Thread(client).start();                clients.add(client);            }        } catch (IOException e) {            e.printStackTrace();        } finally {            if (serverSocket != null) {                try {                    serverSocket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }    class Client implements Runnable {        private Socket socket;        private BufferedReader br;        private PrintWriter pWriter;        private String mes;        public Client(Socket socket) {            this.socket = socket;            try {                this.br = new BufferedReader(new InputStreamReader(                        socket.getInputStream()));                this.pWriter = new PrintWriter(socket.getOutputStream(),true);            } catch (IOException e) {                e.printStackTrace();            }        }        @Override        public void run() {            try{                while (start) {                    while((mes=br.readLine())!=null){                        System.out.println(mes);                        for (int i = 0; i < clients.size(); i++) {                            if(!this.equals(clients.get(i)))                                clients.get(i).pWriter.println(mes);                        }                    }                }                }catch(Exception e){                e.printStackTrace();            }finally{                try {                    if (br!=null) {                    br.close();                    }                    if(socket!=null){                        socket.close();                    }                    if(this!=null){                        clients.remove(this);                    }                } catch (IOException e) {                    e.printStackTrace();                }            }            }        }}

Client

import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JTextArea;import javax.swing.JLabel;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;public class ChatClient extends JFrame {    JTextArea textArea;    Socket socket;    OutputStream oStream;    PrintWriter pWriter;    private JTextField textField;    private boolean start;    private BufferedReader bReader;    public ChatClient() {        getContentPane().setLayout(null);        textArea = new JTextArea();        textArea.setEditable(false);        textArea.setBounds(10, 58, 414, 309);        getContentPane().add(textArea);        textField = new JTextField();        textField.addKeyListener(new KeyAdapter() {            @Override            public void keyPressed(KeyEvent e) {                if (e.getKeyChar() == KeyEvent.VK_ENTER) {                    String string = textField.getText();                    if (!string.equals("")) {                        textArea.append(string + "\n");                        textField.setText("");                        pWriter.println(string);                    }                }            }        });        textField.setBounds(10, 377, 414, 21);        getContentPane().add(textField);        textField.setColumns(10);        JLabel userName = new JLabel("userName");        userName.setBounds(34, 33, 61, 15);        getContentPane().add(userName);        this.setSize(452, 446);        this.setDefaultCloseOperation(EXIT_ON_CLOSE);        this.setVisible(true);        this.addWindowListener(new WindowAdapter() {            @Override            public void windowClosing(WindowEvent e) {                super.windowClosing(e);                disconnect();                System.exit(0);            }        });        new Thread() {            String mesString;            boolean start = true;            @Override            public void run() {                try {                    connect();                    while (start) {                        while ((mesString = bReader.readLine()) != null) {                            textArea.append(mesString + "\n");                        }                    }                } catch (SocketException e1) {                } catch (IOException e) {                    e.printStackTrace();                }            };        }.start();    }    public void connect() {        try {            socket = new Socket("127.0.0.1", 8888);            oStream = socket.getOutputStream();            pWriter = new PrintWriter(oStream, true);            bReader = new BufferedReader(new InputStreamReader(                    socket.getInputStream()));        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }    public void disconnect() {        try {            if (pWriter != null) {                pWriter.close();            }            if (bReader != null) {                bReader.close();            }            if (socket != null) {                socket.close();            }        } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        new ChatClient();    }}
0 0
原创粉丝点击