<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    march alex's blog
    hello,I am march alex
    posts - 52,comments - 7,trackbacks - 0
    這是我很多月以前學習馬士兵的Java教學視頻的時候在教程的基礎上稍微改進了一點的一個聊天室軟件。
    聊天室軟件分為ChatClient類和ChatServer類。
    ChatServer相當于一個服務器。
    ChatClient類相當于一個客戶端。
    用戶可以通過客戶端進行聊天。
    客戶端登錄時會詢問你的姓名,輸入姓名后大家就可以基于此聊天室軟件進行聊天了。

    CHatClient.java
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;

    public class ChatClient extends Frame {
        Socket socket = null;
        DataOutputStream dos = null;
        DataInputStream dis = null;
        private boolean bConnected = false;
        private String name;
        //private boolean named = false;
        
        TextField tfTxt = new TextField();
        TextArea taContent = new TextArea();
        
        Thread tRecv = new Thread(new RecvThread());
        
        public static void main(String[] args) {
            new ChatClient().launchFrame();
            
        }
        
        public void launchFrame() {
            setLocation(400, 300);
            this.setSize(300, 300);
            add(tfTxt, BorderLayout.SOUTH);
            add(taContent, BorderLayout.NORTH);
            pack();
            this.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    disconnect();
                    System.exit(0);
                }
            });
            
            setVisible(true);
            connect();
            
            tfTxt.addActionListener(new TFListener());
            
            //new Thread(new RecvThread()).start();
            tRecv.start();
        }
        
        public void connect() {
                try {
                    socket = new Socket("127.0.0.1", 8888);
                    dos = new DataOutputStream(socket.getOutputStream());
                    dis = new DataInputStream(socket.getInputStream());
                    System.out.println("connected!");
                    taContent.setText("你叫什么名字?\n");
                    bConnected  = true;
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        
        public void disconnect() {
            try {
                dos.close();
                dis.close();
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            /*
            try {
                bConnected = false;
                tRecv.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                try {
                    dos.close();
                    dis.close();
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
    */
        }
        
        private class TFListener implements ActionListener {
            
            private boolean named = false;
            
            public void actionPerformed(ActionEvent e) {
                
                String str = tfTxt.getText().trim();
                //taContent.setText(str);
                tfTxt.setText("");
                
                if(named == false) {
                    named = true;
                    name = str;
                    try {
                        dos.writeUTF(name+" is coming!");
                        dos.flush();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                    return;
                }
                
                try {
                    //dos = new DataOutputStream(socket.getOutputStream());
                    dos.writeUTF(name + ":" + str);
                    dos.flush();                    //dos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            
        } 
        
        private class RecvThread implements Runnable {
            
            private String name;

            public void run() {
                /*
                while(bConnected) {
                    try {
                        String str = dis.readUTF();
                        //System.out.println(str);
                        taContent.setText(taContent.getText()+str+'\n');
                    } catch (SocketException e) {
                        System.out.println("退出了,bye!");
                    } catch (EOFException e) {
                        System.out.println("退出了,bye - bye!");
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                
    */
                try {
                    while(bConnected) {
                        String str = dis.readUTF();
                        //System.out.println(str);
                        taContent.setText(taContent.getText()+str+'\n');
                    }
                } catch (SocketException e) {
                    System.out.println("退出了,bye!");
                } catch (EOFException e) {
                    System.out.println("退出了,bye - bye!");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
        }
        
    }

    ChatServer.java
    import java.io.*;
    import java.net.*;
    import java.util.*;

    public class ChatServer {
        boolean started = false;
        ServerSocket ss = null;
        
        List<Client> clients = new ArrayList<Client>();
        
        public static void main(String[] args) {
            new ChatServer().start();
        }
        
        public void start() {
            try {
                ss = new ServerSocket(8888);
                started = true;
            } catch (BindException e) {
                System.out.println("端口使用中");
                System.out.println("請關掉相應程序并重新運行服務器!");
                System.exit(0);
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            try {
                while(started) {
                    Socket s = ss.accept();
                    Client c = new Client(s);
                    System.out.println("a client connected!");
                    new Thread(c).start();
                    clients.add(c);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
        }
        
        class Client implements Runnable {
            private Socket s;
            private DataInputStream dis = null;
            private DataOutputStream dos = null;
            private boolean bConnected = false;
            
            public Client(Socket s) {
                this.s = s;
                try {
                    dis = new DataInputStream(s.getInputStream());
                    dos = new DataOutputStream(s.getOutputStream());
                    bConnected = true;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            public void send(String str) {
                try {
                    dos.writeUTF(str);
                } catch (IOException e) {
                    clients.remove(this);
                    System.out.println("對方退出了!我從List里面去掉了!");
                    //e.printStackTrace();
                }
            }
            
            public void run() {
                try {
                    while(bConnected) {
                        String str = dis.readUTF();
                        System.out.println(str);
                        for(int i=0;i<clients.size();i++) {
                            Client c = clients.get(i);
                            c.send(str);
                        }
                        /*
                        for(Iterator<Client> it = clients.iterator(); it.hasNext(); ) {
                            Client c = it.next();
                            c.send(str);
                        }
                        
    */
                        /*
                        Iterator<Client> it = clients.iterator();
                        while(it.hasNext()) {
                            Client c = it.next();
                            c.send(str);
                        }
                        
    */
                    }    
                } catch (EOFException e) {
                    System.out.println("Client closed!");
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if(dis != null) dis.close();
                        if(dos != null) dos.close();
                        if(s != null) {
                            s.close();
                            s = null;
                        }
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
        
    }

    posted on 2015-03-09 08:39 marchalex 閱讀(576) 評論(0)  編輯  收藏 所屬分類: java小程序
    主站蜘蛛池模板: 国产在线精品一区免费香蕉| 亚洲日本国产乱码va在线观看| 亚洲欧美中文日韩视频| 国产成人免费在线| 亚洲激情视频在线观看| 国产白丝无码免费视频| 亚洲国产天堂在线观看| 三年片在线观看免费观看大全动漫| 亚洲精品国产成人片| a视频在线观看免费| 久久久久久亚洲精品成人| 91在线手机精品免费观看| 亚洲国产综合在线| 永久久久免费浮力影院| 综合偷自拍亚洲乱中文字幕| 亚洲人成电影网站国产精品| 国产精品成人69XXX免费视频| 亚洲国产精品久久久久婷婷软件| 精品无码AV无码免费专区| 亚洲av无码片区一区二区三区| 看全色黄大色大片免费久久| 日韩毛片在线免费观看| 久久九九亚洲精品| 99在线精品免费视频九九视| 亚洲精品伦理熟女国产一区二区| 亚洲成片观看四虎永久| 久久99青青精品免费观看| 亚洲乱码卡一卡二卡三| 免费一级成人毛片| 国产麻豆成人传媒免费观看| 麻豆狠色伊人亚洲综合网站| 婷婷综合缴情亚洲狠狠尤物| 午夜免费福利片观看| 最新亚洲精品国偷自产在线| 浮力影院亚洲国产第一页| 色老头永久免费网站| 国产精品亚洲精品日韩电影| 久久91亚洲精品中文字幕| 最近2019中文字幕mv免费看 | 最近中文字幕2019高清免费| 亚洲色偷偷偷综合网|