用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

简易聊天软件源码

2013-05-09 作者:海大软件1102班举报

[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) {

        System.out.println("aa\n");

        new ChatServer().start();

    }

    //程序运行就执行下面的程序段

    public void start() {

        try {

            started = true;

            ss = new ServerSocket(8888);//开发一个8888端口的Socket通道

            System.out.println("aa\n");

        } 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);//当有用户连接的时候创建一个Client客户

                System.out.println("a client connected!");

                new Thread(c).start();

                clients.add(c);

                //dis.close();

            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                ss.close();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                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) {

                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);

                        //System.out.println(" a string send !");

                    }

                    /*

                    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();

                }

            }

        }

    }

}

下面的是客户端的源代码

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.net.*;

public class ChatClient extends Frame {

    Socket s = null;

    DataOutputStream dos = null;

    DataInputStream dis = null;

    private boolean bConnected = 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();

        setVisible(true);

        connect();

        addWindowListener(new WindowAdapter()

        {

            public void windowClosing(WindowEvent e)

            {

                disconnect();

                System.exit(0);

            }

        });

        tfTxt.addActionListener(new TFListener());

        new Thread(new RecvThread()).start();

    }

    public void connect() {

        try {

            s = new Socket("127.0.0.1", 8888);

            dos = new DataOutputStream(s.getOutputStream());

            dis = new DataInputStream(s.getInputStream());

            bConnected = true;

        } catch(UnknownHostException e) {

            e.printStackTrace();

        } catch(IOException e) {

            e.printStackTrace();

        }

    }

    public void disconnect() {

        try {

            bConnected = false;

            tRecv.join();

        } catch(InterruptedException e2) {

            e2.printStackTrace();

        }

        finally {

            try {

                dos.close();

                s.close();

                dis.close();

            } catch(IOException e) {

                e.printStackTrace();

            }

            ;

        }

    }

    private class TFListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {

            String str = tfTxt.getText().trim();

            //taContent.setText(str);

            tfTxt.setText("");

            try {

                dos.writeUTF(str);

                dos.flush();

            } catch(IOException e1) {

                e1.printStackTrace();

            }

        }

    }

    private class RecvThread implements Runnable {

        public void run() {

            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 (IOException e) {

                e.printStackTrace();

            }

        }

    }

}


分享到:
更多

网友评论    (发表评论)

共2 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。