当前位置 博文首页 > 外星喵的博客:基于java socket的简单通信系统

    外星喵的博客:基于java socket的简单通信系统

    作者:[db:作者] 时间:2021-07-12 15:44

    版本一 单客户端单服务器通信

    • 服务端代码:
    public class ServerDemo {
    
        public static void main(String[] args) throws IOException {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("Server started with port number 8888...");
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("有新客户端接入。。。");
                Boolean isOff = false;
                new Thread(new Runnable() {
                    Socket s;
                    Boolean isOff;
    
                    Runnable setSocket(Socket s,Boolean isOff) {
                        this.s = s;
                        this.isOff = isOff;
                        return this;
                    }
    
                    @Override
                    public void run() {
                        InputStream inputStream;
                        try {
                            inputStream = s.getInputStream();
                            try(BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))){
                                String line;
                                while (!isOff && (line = reader.readLine()) != null) {
                                    System.out.println("client:"+ line);
                                }
                            }
                        } catch (Exception e) {
                            System.out.println("server 已退出通信!");
                        } finally {
                            if(s != null){
                                try {
                                    s.close();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                }.setSocket(socket,isOff)).start();
    
    
                new Thread(new Runnable() {
                    Socket s;
                    Boolean isOff;
    
                    Runnable setSocket(Socket s,Boolean isOff) {
                        this.s = s;
                        this.isOff = isOff;
                        return this;
                    }
    
                    @Override
                    public void run() {
                        Scanner scanner = new Scanner(System.in);
                        String line;
                        OutputStream outputStream = null;
                        try {
                            outputStream = s.getOutputStream();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        try (BufferedOutputStream writer = new BufferedOutputStream(outputStream)) {
                            while (!isOff &&  !(line = scanner.nextLine()).equals("exit") ) {
                                line += "\n";
                                writer.write(line.getBytes(StandardCharsets.UTF_8));
                                writer.flush();
                            }
                            writer.write("\nGoodbye! client!".getBytes(StandardCharsets.UTF_8));
                            writer.flush();
                            isOff = true;
                        } catch (IOException e) {
                            System.out.println("server 已退出通信!");
                        } finally {
                            if(s != null){
                                try {
                                    s.close();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
    
                    }
                }.setSocket(socket,isOff)).start();
            }
    
    
        }
    
    
    }
    
    
    • 客户端代码:
    public class ClientDemo {
    
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket("127.0.0.1",8888);
            Boolean isOff = false;
            System.out.println("Server connected successfully...");
    
            new Thread(new Runnable() {
                Socket s;
                Boolean isOff;
    
                Runnable setSocket(Socket s,Boolean isOff) {
                    this.s = s;
                    this.isOff = isOff;
                    return this;
                }
    
                @Override
                public void run() {
                    Scanner scanner = new Scanner(System.in);
                    String line;
                    OutputStream outputStream;
                    try {
                        outputStream = s.getOutputStream();
                        try (BufferedOutputStream writer = new BufferedOutputStream(outputStream)) {
                            while (!(line = scanner.nextLine()).equals("exit")) {
                                line += "\n";
                                writer.write(line.getBytes(StandardCharsets.UTF_8));
                                writer.flush();
                            }
                            writer.write("\nGoodbye! server!".getBytes(StandardCharsets.UTF_8));
                            writer.flush();
                            isOff = true;
                        } catch (Exception e) {
                            System.out.println("client 已退出通信!");
                        }finally {
                            if(s != null){
                                try {
                                    s.close();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }catch (Exception e) {
                            System.out.println("client 已退出通信!");
                    }
                }
            }.setSocket(socket,isOff)).start();
    
            new Thread(new Runnable() {
                Socket s;
                Boolean isOff;
    
                Runnable setSocket(Socket s,Boolean isOff) {
                    this.s = s;
                    this.isOff = isOff;
                    return this;
                }
    
                @Override
                public void run() {
                    InputStream inputStream;
                    try {
                        inputStream = socket.getInputStream();
                        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
                            String line;
                            while ((line = bufferedReader.readLine()) != null && !isOff){
                                System.out.println("server:"+line);
                            }
                        }
                    } catch (IOException e) {
                        System.out.println("通信已经关闭了!");
                    }
                }
            }.setSocket(socket,isOff)).start();
        }
    }
    
    • server端运行示例如下:
      在这里插入图片描述

    • client端运行示例如下:在这里插入图片描述

    cs
    下一篇:没有了