分享

简单聊天程序java socket

 zhanghuan 2007-11-12
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
public class Client extends Frame implements Runnable
{
    private TextField nameBox=new TextField("<姓名>");
    private TextArea msgView=new TextArea();
    private TextField sendBox=new TextField();
    private BufferedReader reader;
    private PrintWriter writer;
    private Socket socket;
    public Client(String title)
    {
        super(title);
        msgView.setEditable(false);
        add(nameBox,"North");
        add(msgView,"Center");
        add(sendBox,"South");
        sendBox.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                try{
                    writer.println(nameBox.getText()+":"+sendBox.getText());
                    sendBox.setText("");
                }catch(Exception ie){}
            }
        });
        pack();       
    }

public void run()
{
    while(true){
        try{
            msgView.append(reader.readLine()+"\n");
        }catch(IOException ie){
        }
    }
}
private void connect()
{
    try{
        msgView.append("和服务器套接字连接\n");
       socket=new Socket("127.0.0.1",2554);
        msgView.append("聊天就绪\n");
        reader=new BufferedReader(
            new InputStreamReader(socket.getInputStream()));
        writer=new PrintWriter(socket.getOutputStream(),true);
           new Thread(this).start();       
    }catch(Exception e){
        msgView.append("连接失败");
    }
}
public static void main(String[] args)
{
    Client client=new Client("聊天");
    client.setVisible(true);
    client.connect();
}
}













import java.net.*;
import java.io.*;
import java.util.*;
public class Server
{
    private ServerSocket server;
    private BManager bMan=new BManager();
    public Server(){};
    void startServer()
    {
        try
        {
            server=new ServerSocket(2554);
            System.out.println("服务器套接字创建完毕");
            while(true)
            {
               Socket socket=server.accept();
                new Chat_Thread(socket).start();
                bMan.add(socket);
                bMan.sendClientInfo();
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    public static void main(String [] args)
    {
        Server server=new Server();
        server.startServer();
    }
    class Chat_Thread extends Thread
    {
        Socket socket;
        private BufferedReader reader;
        private PrintWriter writer;
        Chat_Thread(Socket socket)
        {
            this.socket=socket;
        }
        public void run()
        {
            try
            {
                reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                writer=new PrintWriter(socket.getOutputStream(),true);
                String msg;
                while((msg=reader.readLine())!=null)
                {
                    System.out.println(msg);
                    bMan.sendToAll(msg);
                }
            }catch(Exception e){
            }finally{
                try{
                    bMan.remove(socket);
                   if(reader!=null)reader.close();
                   if(writer!=null)writer.close();
                   if(socket!=null)socket.close();
                   reader=null;writer=null;socket=null;
                   System.out.println("客户机离开");
                  
                   bMan.sendClientInfo();
                }catch(Exception e){}
            }
        }
    }
    class BManager extends Vector
    {
        BManager(){}
        void add(Socket sock)
        {
            super.add(sock);
        }
        void remove(Socket sock)
        {
            super.remove(sock);
        }
        synchronized void sendToAll(String msg)
        {
            PrintWriter writer=null;
            Socket sock;
            for(int i=0;i<size();i++)
            {
                sock=(Socket)elementAt(i);
                try
                {
                    writer=new PrintWriter(sock.getOutputStream(),true);
                }catch(IOException ie){}
                if(writer!=null)writer.println(msg);
            }
        }
        synchronized void sendClientInfo()
        {
            String info="当前在线人数:"+size();
            System.out.println(info);
            sendToAll(info);
        }
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多