用户注册



邮箱:

密码:

用户登录


邮箱:

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

发表随想


还能输入: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、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...