多人聊天(附源代码)

简单实现多人聊天:
1:启动服务器
2:启动客户端
3:服务器用集合来接收客户
4:客户端发送信息
5:服务器接收客户端消息
6:服务器发送给其他客户端
7:其他客户端接收服务器消息

思路总结:运用网络读写包,客户端发送消息,通过服务器转发给其他客户端,其他客户端接收服务器消息就可以简单实现多人聊天

运用到的知识点:网络包,io读写流,多线程

/*
* 服务器
* */
public class Gwa {
    public static void main(String[] args) throws Exception {
        //启动服务器
        ServerSocket ss=new ServerSocket(1122);
        System.out.println("服务器已启动,等待客户端上线");

        Vector<Socket> vc=new Vector<Socket>();
        while (true){
            Socket sk= ss.accept();
            vc.add(sk);
            //服务器线程
            new Ss1(sk,vc).start();
        }


    }
/*
* 客户端
* */
public class Myc {
    public static void main(String[] args) throws Exception{
        Socket sk=new Socket(InetAddress.getByName("127.0.0.1"),1122);
        System.out.println("已上线");

        new read(sk).start();

        new wread(sk).start();



    }
/*
* 写入
* */
public class wread extends Thread{
    private Socket sk=null;

    public wread(Socket sk) {
        this.sk = sk;
    }
            Scanner may=new Scanner(System.in);
    @Override
    public void run() {
        while (true){
            try {
                //写
                OutputStream os= sk.getOutputStream();
                OutputStreamWriter osw=new OutputStreamWriter(os);
                BufferedWriter bw=new BufferedWriter(osw);
                System.out.println("请输入你要发送的消息:");
                String str=may.next();

                if(str!=null){
                    bw.write(str);
                    bw.newLine();
                    bw.flush();
                }
                if("bye".equals(str)){
                    break;
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
/*
* 转发
* */
public class Ss1 extends Thread {
    Socket sk=null;
    Vector<Socket> vc=null;
    //使用集合来接收客户端
    public Ss1(Socket sk, Vector<Socket> vc) {
        this.sk=sk;
        this.vc=vc;
    }

    @Override
    public void run() {
        while (true){
            try {
                //读
                InputStream is= sk.getInputStream();
                InputStreamReader isr=new InputStreamReader(is);
                BufferedReader br=new BufferedReader(isr);
                String str=br.readLine();

                for (Socket s:vc) {
                    if(s!=null){
                        if(s!=sk){
                            //写
                            OutputStream os= s.getOutputStream();
                            OutputStreamWriter osw=new OutputStreamWriter(os);
                            BufferedWriter bw=new BufferedWriter(osw);
                            bw.write(str);
                            bw.newLine();
                            bw.flush();

                        }
                    }
                }
                if("bye".equals(str)){
                    sk.close();//发送消息
                    br.close();//读取消息
                    vc.remove(sk);//下线
                    break;
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
/*
* 读取
* */
public class read extends Thread{
    private Socket sk=null;

    public read(Socket sk) {
        this.sk = sk;
    }

    @Override
    public void run() {
        while (true){
            try {
                //读
                InputStream is=sk.getInputStream();
                InputStreamReader isr=new InputStreamReader(is);
                BufferedReader br=new BufferedReader(isr);
                String str=br.readLine();
                System.out.println("\t收到消息:"+str);


            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值