BIO实现 Socket 通信

yls 2020/5/23

1.服务端

/**
 * BIO Socket通信实例
 */
public class BioServer {
    public static void main(String[] args) throws IOException {
        ExecutorService threadPool = Executors.newCachedThreadPool();
        //创建serverSocket,并绑定端口
        //构造函数内部与 serverSocket.bind(new InetSocketAddress("localhost",6666)); 实现一致
        ServerSocket serverSocket = new ServerSocket(6666);

        while (true) {
            //监听,等待客户端连接
            Socket socket = serverSocket.accept();
            System.out.println("连接到一个客户端");
            System.out.println(socket.getPort());
            System.out.println(socket.getInetAddress());

            //接收到客户端后,就启动一个新线程,不然其它后进来的线程无法连接
            threadPool.execute(() -> {
                try (
                        //获取socket 输入流,用来接收数据,不阻塞
                        InputStream inputStream = socket.getInputStream();
                        ////获取socket 输出流流,用来发送数据,不阻塞
                        OutputStream outputStream = socket.getOutputStream()
                ) {

                    System.out.println("获取socket 输入流成功。。。");
                    while (true) {
                        byte[] bytes = new byte[2];
                        //阻塞
                        int read = inputStream.read(bytes);
                        System.out.println("read======" + read);
                        System.out.println("从输入流获取值成功。。。");
                        System.out.println(new String(bytes, 0, read));
                        //向客户端发送数据
                        outputStream.write("22222......".getBytes());
                        outputStream.flush();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    System.out.println("finally 执行了。。。");
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }
}

2.客户端

public class BioClient {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        try (
                //连接服务端
                Socket socket = new Socket("127.0.0.1", 6999);
                //获取socket输出流,用于发数据
                OutputStream outputStream = socket.getOutputStream();
                //获取socket输入流,用于接收数据
                InputStream inputStream = socket.getInputStream()
        ) {

            System.out.println("连接服务端成功。。。。。");
            while (true) {
                //发数据
                outputStream.write(scanner.nextLine().getBytes());
                System.out.println("发送数据成功。。。。");
                byte[] bytes = new byte[128];
                //接收数据
                while (true) {
                    int read = inputStream.read(bytes);
                    if (read == -1) break;
                    System.out.println("接收数据成功");
                    System.out.println(new String(bytes, 0, read));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
    }
}
posted @ 2020-05-23 00:09  她的开呀  阅读(338)  评论(0编辑  收藏  举报