JAVA基础-基于多线程的聊天程序

引言

什么是程序 ?

        一个程序可以有多个进程 。程序是一段静态的代码,它是应用程序执行的蓝本。

什么是进程 ?

        一个进程可以有多线程 进程是指一种正在运行的程序,有自己的地址空间。 作为蓝本的程序可以被多次加载到系统的不同内存区域分别执行,形成不同的进程。

        基于进程的特点是允许计算机同时运行两个或更多的程序。

什么是线程 ?

        线程是进程内部单一的一个顺序控制流。 一个进程在执行过程中,可以产生多个线 程。每个线程也有自己产生、存在和消亡的过程。

一,写一个类用来发给送消息

示例代码:

public class MyWriter implements Runnable {
    private Socket s;
    String msg;
    private PrintWriter os;

    public MyWriter(Socket s, String msg) {
        this.s = s;
        this.msg=msg;
        try {
            this.os = new PrintWriter(this.s.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public MyWriter() {
    }

    public Socket getS() {
        return s;
    }

    public void setS(Socket s) {
        this.s = s;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public void run() {
        while (true) {
            Scanner scan = new Scanner(System.in);
            os.printf("%s:%s", msg, scan.nextLine() + "\r\n");
            os.flush();
        }
    }
}

二,写一个类用来接收消息

示例代码:

public class MyReader implements Runnable {
    private Socket s;
    String msg;

    public MyReader(Socket s) {
        this.s = s;
        try {
            this.br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Socket getS() {
        return s;
    }

    public void setS(Socket s) {
        this.s = s;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public MyReader() {
    }

    private BufferedReader br;

    @Override
    public void run() {
        while (true) {
            try {
                System.out.println(this.br.readLine() + "\r\n");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

三,实例化服务器类

示例代码:

public class MySever {
    public static void main(String[] args) {
        try {
            ServerSocket s=new ServerSocket(8888);
            Socket ss=s.accept();
            Runnable ruw = new MyWriter(ss,"sever");
            Thread thw = new Thread(ruw);
            Runnable rur = new MyReader(ss);
            Thread thr = new Thread(rur);
            thw.start();
            thr.start();
                }catch (Exception e){
                    e.printStackTrace();
                }

    }
}

四,实例化客户端类

示例代码:

public class MyClient {
    public static void main(String[] args) {
        try {
            Socket c=new Socket("192.168.21.37",8888);
            Runnable ruw = new MyWriter(c,"client");
            Thread thw = new Thread(ruw);
            Runnable rur = new MyReader(c);
            Thread thr = new Thread(rur);
            thw.start();
            thr.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

五,项目结果

JAVA基础-基于多线程的聊天程序_第1张图片

 

你可能感兴趣的:(JAVA案例,java,开发语言)