【Java--实现(同局域网)简单聊天案例】

Java–实现(同局域网)简单聊天案例
(代码如下,需要练习请自取)
注:下列都需要在idea中完成,客户端和服务端都要运行才可链接一者断开两者程序都结束运行

单线程

只能实现一个客户端连接

客户端


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

public class Client {
    public static void main(String[] args) {
        //客户端
        try{
            Socket c = new Socket("127.0.0.1",6666);
            //此处ip地址为客户端ip
            //“6666”为服务端设置的口令相当于密码
            PrintWriter out = new PrintWriter(c.getOutputStream()); //发信息
            BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); //接信息
            while(true) {
                //发信息
                System.out.println("发信息:");
                String msg = new Scanner(System.in).nextLine() + "\r\n";
                out.write(msg);
                out.flush();

                //先收信息
                String info = br.readLine();
                System.out.println(info);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

服务端


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


public class Server {
    public static void main(String[] args) {
        //List<Socket> lists = new ArrayList<>();
        //服务器
        try {
            //System.out.println(InetAddress.getLocalHost().getHostAddress());
            ServerSocket server = new ServerSocket(6666);
            //“6666”设置口令相当于密码
            Socket c = server.accept();
            System.out.println("有人上线");
            PrintWriter out = new PrintWriter(c.getOutputStream()); //发信息
            BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream())); //接信息

            while (true) {
                //先收信息
                String msg = br.readLine();
                System.out.println(msg);

                //发信息
                System.out.println("发信息:");
                String info = new Scanner(System.in).nextLine() + "\r\n";
                out.write(info);
                out.flush();
            }


            //while(true) {
            //    Socket c = server.accept();//中断
            //    lists.add(c);
            //    System.out.println("有人连线");
            //}


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

多线程

能实现多个客户端连接服务端

服务端

服务端的实现方法

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.util.Scanner;

public class ChatUtil {
    private PrintWriter writer;
    private BufferedReader reader;
    private String title;



    public ChatUtil(PrintWriter writer, BufferedReader reader, String title) {
        this.writer = writer;
        this.reader = reader;
        this.title = title;
    }

    /**
     * 发信息
     */
    public void a() {
        while (true) {
            //发信息
            String info = title + ":" + new Scanner(System.in).nextLine() + "\r\n";
            writer.write(info);
            writer.flush();
        }
    }

    public void b() {
        while (true) {
            try {
                //先收信息
                String msg = reader.readLine();//
                System.out.println(msg);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    public PrintWriter getWriter() {
        return writer;
    }

    public void setWriter(PrintWriter writer) {
        this.writer = writer;
    }

    public BufferedReader getReader() {
        return reader;
    }

    public void setReader(BufferedReader reader) {
        this.reader = reader;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

}

服务端的执行程序

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket server = new ServerSocket(6666);

            Socket c = server.accept();
            PrintWriter writer = new PrintWriter(c.getOutputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
            ChatUtil cu = new ChatUtil(writer,reader,"服务器");
            new Thread(cu::a).start();
            new Thread(cu::b).start();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}


客户端


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

public class Client {
    public static void main(String[] args) {
        try{
            Socket c = new Socket("127.0.0.1",6666);
            PrintWriter writer = new PrintWriter(c.getOutputStream());
            BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream()));
            ChatUtil cu = new ChatUtil(writer,reader,"客户");
            new Thread(cu::a).start();
            new Thread(cu::b).start();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}


版权声明:本文为qq_46089857原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。