• Java BIO基本介绍


    Java BIO基本介绍

    • 📜Java BIO就是传统的java io 编程,其相关的类和接口在java.io
    • 📜Blo(blockingl/O):同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)

    工作原理

    🌟服务端
    1、通过serversoket注册端口
    2、服务端调用accpect方法用于监听客户端的socket请求
    3、从socket中获取字节输入或输出流进行数据的读写操作

    🌟客户端
    1、通过socket对象与服务端连接
    2、从socket中得到字节输入或者输出流进行读写操作

    在这里插入图片描述

    BIO传统通讯实现

    服务端

      //服务端
        public static void main(String[] args) {
            try {
                //定义ServerSocket进行端口注册
                ServerSocket socket = new ServerSocket(8686);
                //监听客户端的Socket请求
                Socket st = socket.accept();
                //获取Socket请求中的字节输入流对象
                InputStream is = st.getInputStream();
                //把字节输入流包装成缓冲字符输入流
                BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
                String msg;
                if ((msg = bfr.readLine())!=null){
                    System.out.println("服务端接收到的信息"+ msg);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    客户端

        //客户端
        public static void main(String[] args) {
            try {
                //创建Socket对象请求服务器连接
                Socket socket = new Socket("127.0.0.1",8686);
                //从Socket中获取字节流
                OutputStream os = socket.getOutputStream();
                //把字节输出流包装成一个打印流
                PrintStream ps = new PrintStream(os);
                ps.println("hello word!!! ");
                ps.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    总结
    • 🔔在以上通信中,服务端会一致等待客户端的消息,如果客户端没有进行消息的发送,服务端将一直进入阻塞状态。
    • 🔔同时服务端是按照行获取消息的,这意味着客户端也必须按照行进行消息的发送,否则服务端将进入等待消息的阻塞状态!

    BIO实现多发和多收

    思想:通过while函数实现客户端一直发送消息往服务端,服务端一直接接收消息并输出,实现多发和多收的机制

    客户端

    //客户端
        public static void main(String[] args) {
            try {
                //创建Socket对象请求服务器连接
                Socket socket = new Socket("127.0.0.1",8686);
                //从Socket中获取字节流
                OutputStream os = socket.getOutputStream();
                //把字节输出流包装成一个打印流
                PrintStream ps = new PrintStream(os);
                Scanner sc =  new Scanner(System.in);
                while (true){
                    System.out.print("请说");
                    String msg = sc.nextLine();
                    ps.println(msg);
                    ps.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    服务端

    //服务端
        public static void main(String[] args) {
            try {
                //定义ServerSocket进行端口注册
                ServerSocket socket = new ServerSocket(8686);
                //监听客户端的Socket请求
                Socket st = socket.accept();
                //获取Socket请求中的字节输入流对象
                InputStream is = st.getInputStream();
                //把字节输入流包装成缓冲字符输入流
                BufferedReader bfr = new BufferedReader(new InputStreamReader(is));
                String msg;
                while ((msg = bfr.readLine())!=null){
                    System.out.println("服务端接收到的信息"+ msg);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    结果:

    实现了客户端每发一条消息,服务端就即使接收并打印出来

    服务端 | 客户端

    Alt Alt

  • 相关阅读:
    WebPack5高级使用总结(三)
    ssm+vue+elementUI 高校志愿者服务招募网站-#毕业设计
    谁家分析数据还要开发啊,不都一键得报表吗?
    酷开系统 酷开科技,将家庭娱乐推向新高潮
    类加载过程
    nProgress的简单使用
    【毕业设计】基于javaEE+原生Servlet+jsp的人力资源管理系统设计与实现(毕业论文+程序源码)——人力资源管理系统
    Web服务(12)——Tomcat管理
    Vue.js+SpringBoot开发高校实验室管理系统
    软考 网工 每日学习打卡 2024/3/19
  • 原文地址:https://blog.csdn.net/weixin_58286934/article/details/127912036