A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jayshun 中级黑马   /  2014-5-14 00:26  /  1039 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

public class ChatClient extends Frame
{
        TextArea ta = new TextArea();
        TextField tf = new TextField();
        public void launchFrame() throws Exception
        {
                this.add(ta, BorderLayout.CENTER);
                this.add(tf, BorderLayout.SOUTH);
                tf.addActionListener(
                        new ActionListener()
                        {
                                public void actionPerformed(ActionEvent ae)
                                {
                                        try {
                                                String sSend = tf.getText();
                                                if(sSend.trim().length() == 0) return;
                                                ChatClient.this.send(sSend);
                                                tf.setText("");
                                                ta.append(sSend + "\n");
                                        }
                                        catch (Exception e) { e.printStackTrace(); }
                                }
                        }
                        );
               
                this.addWindowListener(
                        new WindowAdapter()
                        {
                                public void windowClosing(WindowEvent e)
                                {
                                        System.exit(0);
                                }
                        }
                        );
                setBounds(300,300,300,400);
                setVisible(true);
                tf.requestFocus();
        }
       
        Socket s = null;
       
        public ChatClient() throws Exception
        {
                s = new Socket("127.0.0.1", 8888);
                launchFrame();
                (new Thread(new ReceiveThread())).start();
        }
       
        public void send(String str) throws Exception
        {
                DataOutputStream dos = new DataOutputStream(s.getOutputStream());
                dos.writeUTF(str);
        }
       
        public void disconnect() throws Exception
        {
                s.close();
        }
       
        public static void main(String[] args) throws Exception
        {
                BufferedReader br = new BufferedReader (
                                                                new InputStreamReader(System.in));
                ChatClient cc = new ChatClient();
                String str = br.readLine();
                while(str != null && str.length() != 0)
                {
                        cc.send(str);
                        str = br.readLine();
                }
                cc.disconnect();
        }
       
        class ReceiveThread implements Runnable
        {
                public void run()
                {
                        if(s == null) return;
                        try {
                                DataInputStream dis = new DataInputStream(s.getInputStream());
                                String str = dis.readUTF();
                                while (str != null && str.length() != 0)
                                {
                                        //System.out.println(str);
                                        ChatClient.this.ta.append(str + "\n");
                                        str = dis.readUTF();
                                }
                        }
                        catch (Exception e)
                        {
                                e.printStackTrace();
                        }
                       
                }
        }
}
import java.net.*;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class ChatServer extends Frame
{
        TextArea ta = new TextArea();
        public void launchFrame()
        {
                add(ta, BorderLayout.CENTER);
                setBounds(0,0,200,300);       
                this.addWindowListener(
                        new WindowAdapter()
                        {
                                public void windowClosing(WindowEvent e)
                                {
                                        System.exit(0);
                                }
                        }
                        );
                setVisible(true);
        }
       
        ServerSocket server = null;
        Collection cClient = new ArrayList();
       
        public ChatServer(int port) throws Exception
        {
                server = new ServerSocket(port);
                launchFrame();
        }
       
        public void startServer() throws Exception
        {
                while(true)
                {
                        Socket s = server.accept();
                        cClient.add( new ClientConn(s) );
                        ta.append("NEW-CLIENT " + s.getInetAddress() + ":" + s.getPort());
                        ta.append("\n" + "CLIENTS-COUNT: " + cClient.size() + "\n\n");
                }
        }
       
        class ClientConn implements Runnable
        {
                Socket s = null;
                public ClientConn(Socket s)
                {
                        this.s = s;
                        (new Thread(this)).start();
                }
               
                public void send(String str) throws IOException
                {
                        DataOutputStream dos = new DataOutputStream(s.getOutputStream());
                        dos.writeUTF(str);
                }
               
                public void dispose()
                {
                        try {
                                if (s != null) s.close();
                                cClient.remove(this);
                                ta.append("A client out! \n");
                                ta.append("CLIENT-COUNT: " + cClient.size() + "\n\n");
                        }
                        catch (Exception e)
                        {
                                e.printStackTrace();
                        }
                }
               
                public void run()
                {
                        try {
                               
                                DataInputStream dis = new DataInputStream(s.getInputStream());
                                String str = dis.readUTF();
                                while(str != null && str.length() !=0)
                                {
                                        System.out.println(str);
                                        for(Iterator it = cClient.iterator(); it.hasNext(); )
                                        {
                                                ClientConn cc = (ClientConn)it.next();
                                                if(this != cc)
                                                {
                                                        cc.send(str);
                                                }
                                        }
                                        str = dis.readUTF();
                                        //send(str);
                                }
                                this.dispose();
                        }
                        catch (Exception e)
                        {
                                System.out.println("client quit");
                                this.dispose();
                        }
                       
                }
        }
       
        public static void main(String[] args) throws Exception
        {
                ChatServer cs = new ChatServer(8888);
                cs.startServer();
        }
}

4 个回复

倒序浏览
自己写的????
回复 使用道具 举报
很好,谢谢分享。
回复 使用道具 举报
谢谢分享··
回复 使用道具 举报
谢谢分享~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马