Java Socket编程之用多线程实现多人聊天工具

Java Socket编程之用多线程实现多人聊天工具

## 服务端: ##

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Server1 implements Runnable {// 服务端
    static List<Socket> socketList=new ArrayList<Socket>();
// 读取 In
    static Socket socket = null;
    static ServerSocket serverSocket = null;

    public Server1() {// 构造方法
        try {
            serverSocket = new ServerSocket(9999);

        } catch (IOException e) {

            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("************服务端*************");
        Server1 t = new Server1();
        int count = 0;
        while (true) {          
            try {
//              System.out.println("端口9999等待被连接......");
                socket = serverSocket.accept();
                count++;
                System.out.println("第" + count + "个客户已连接");
                socketList.add(socket);


            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Print p = new Print(socket);
            Thread read = new Thread(t);

            Thread print = new Thread(p);
            read.start();
            print.start();
        }
    }

    @Override
    public void run() {
        // 重写run方法
        try {
            Thread.sleep(1000);

            BufferedReader in = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));

            while (true) {
                String jieshou = in.readLine();
                System.out.println( jieshou);




                for (int i = 0; i < socketList.size(); i++) {
                    Socket socket=socketList.get(i);

                    PrintWriter out = new PrintWriter(socket.getOutputStream());

                    if (socket!=this.socket) {
                        out.println(jieshou);
                    }else{

                        out.println("(你)"+jieshou);

                    }


                    out.flush();
                }





            }
        } catch (Exception e) {

            e.printStackTrace();
        }
    }

}

class Print implements Runnable {
    static List<Socket> socketList=new ArrayList<Socket>();

    Scanner input = new Scanner(System.in);
    public Print(Socket s) {// 构造方法
        try {

            socketList.add(s);

        } catch (Exception e) {

            e.printStackTrace();
        }
    }
    @Override
    public void run() {
        try {
            Thread.sleep(1000);

            while (true) {
                String msg = input.next();
            for (int i = 0; i < socketList.size(); i++) {
                Socket socket=socketList.get(i);
                PrintWriter out = new PrintWriter(socket.getOutputStream());

                // System.out.println("对客户端说:");

                out.println("服务端说:"+msg);
                out.flush();
            }
            }


        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

    }
}

## 客户端: ##

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Clients1 implements Runnable {// 客户端
    static Socket socket = null;
    Scanner input = new Scanner(System.in);

    public static void main(String[] args) {
        System.out.println("************客户端1*************");
        try {
            socket = new Socket("127.0.0.1", 9999);

            System.out.println("已经连上服务器了");
        } catch (Exception e) {

            e.printStackTrace();
        }
        Clients1 t = new Clients1();
        Read r = new Read(socket);
        Thread print = new Thread(t);
        Thread read = new Thread(r);
        print.start();
        read.start();
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000);         
            PrintWriter out = new PrintWriter(socket.getOutputStream());
            while (true) {

                String msg = input.next();
                out.println("Cent3说:"+msg);
                out.flush();
            }
        } catch (Exception e) {

            e.printStackTrace();
        }

    }
}

class Read implements Runnable {
    static Socket socket = null;

    public Read(Socket socket) {
        this.socket = socket;

    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000);

            BufferedReader in = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));
            while (true) {
                System.out.println(  in.readLine());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值