<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 閱讀(580) 評論(0)  編輯  收藏 所屬分類: java小程序
    主站蜘蛛池模板: 久久精品免费一区二区喷潮| 中文字幕亚洲综合精品一区| 亚洲久热无码av中文字幕| 成全高清在线观看免费| 亚洲中文字幕无码久久2017| 一级毛片在线免费视频| 国产精品亚洲产品一区二区三区| 美女视频黄a视频全免费网站一区| 国产一区二区三区在线免费观看 | 国产精品久久久久免费a∨| 亚洲av午夜福利精品一区 | 免费大片av手机看片| 亚洲成A人片在线观看中文| 日韩在线观看视频免费 | 亚洲电影中文字幕| 在线观看免费av网站| 亚洲五月丁香综合视频| 在线观看免费高清视频| 亚洲成av人无码亚洲成av人| 免费在线观看a级毛片| 国产精品免费久久久久影院| 久久亚洲免费视频| 在线观看免费高清视频| 高h视频在线免费观看| 亚洲精品国精品久久99热一| 67194成手机免费观看| 久久久国产亚洲精品| 亚洲精品NV久久久久久久久久| 免费在线黄色电影| 亚洲精品美女在线观看播放| 日本无吗免费一二区| 99视频免费在线观看| 亚洲日本人成中文字幕| 亚洲综合精品网站在线观看| 久久久久免费看黄a级试看| jlzzjlzz亚洲jzjzjz| 亚洲国产成人影院播放| 久久久国产精品无码免费专区| 亚洲中文字幕精品久久| 亚洲中文字幕久久精品无码喷水| free哆啪啪免费永久|