2.JAVA BIO

Java BIO基本介绍

java BIO就是传统的java io编程,其相关的类和接口在java.io

同步阻塞,服务器实现模式是一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事,就会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户端连接服务器)

2.JAVA BIO

传统的BIO编程实例回顾

网络编程的基本模型事Client/Server模型,也就是两个进程之间进行互相通信,其中服务端提供位置信息(绑定IP地址和端口),客户端通过连接操作向服务端监听端口地址发起连接请求,基于TCP下协议下进行三次握手,连接成功后,双方通过网络嵌套字(Socket)进行通信

传统的同步阻塞模型开发中,服务端ServerSocket负责绑定IP地址,启动监听端口;客户端Socket负责发起连接操作,连接成功后,双方通过输入和输出流进行阻塞式通信

基于BIO模式下的通信,客户端-服务端是完全同步的,完全耦合的

1.服务端代码:
        /**
         * 目标:客户端发送消息,服务端接收消息
         */
        public class Server {
            public static void main(String[] args) {
                try {
                    System.out.println("======服务端启动=======");
                    //1.定义一个ServerSocket对象进行服务端的端口注册
                    ServerSocket ss=new ServerSocket(9999);
                    System.out.println("======服务端等待连接.......");
                    //2.监听客户端的Socket连接请求
                    Socket socket = ss.accept();
                    //3.从Socket管道中得到一个字节输入流对象
                    InputStream inputStream=socket.getInputStream();
                    //4.把字节输入流包装称一个缓冲字符输入流
                    BufferedReader br=new BufferedReader(new InputStreamReader(inputStream));
                    String msg;
                    while ((msg=br.readLine())!=null){
                        System.out.println("服务端接收到的消息:"+msg);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

2.客户端代码
    public class Client {
        public static void main(String[] args) {
            try {
                //1.创建Socket对象请求服务端的连接
                Socket client=new Socket("127.0.0.1",9999);
                //2.从Scoket对象中获取一个字节输出流
                OutputStream outputStream = client.getOutputStream();
                //3.把字节流包装成一个打印流
                PrintStream ps=new PrintStream(outputStream);
                ps.print("hello world!服务端,你好!");
                ps.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

1.启动服务端,

服务端等待客户端连接,阻塞!

2.JAVA BIO

2.启动客户端,

客户端发送字符串,但不是一行,服务端报错,因为客户端发送完毕后,关闭通道,服务端也对应关闭,抛出异常!

2.JAVA BIO

3.改进

让客户端发送一行消息

2.JAVA BIO

4.改进

让服务端只读一行就退出

2.JAVA BIO

Original: https://www.cnblogs.com/wmd-l/p/16548916.html
Author: 努力的达子
Title: 2.JAVA BIO

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/570122/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Kibana——通过Nginx代理Kibana并实现登陆认证

    前言 在使用ELK进行日志统计的时候,由于Kibana自身并没有身份验证的功能,任何人只要知道链接地址就可以正常登录到Kibana控制界面。 由于日常的查询,添加日志和删除日志都是…

    Java 2023年5月30日
    073
  • 多线程编程总结:三、Task的使用和意义

    Task 创建每个线程需要占用1MB的虚拟内存,并且线程过多会导致CPU耗费大量时间在切换不同线程上。所以在之前我们会使用线程池来自动分配线程。 在.Net Framwork 4,…

    Java 2023年5月30日
    077
  • SpringBoot三招组合拳,手把手教你打出优雅的后端接口

    前言 一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。如何构建这几个部分每个公司…

    Java 2023年5月30日
    088
  • 多线程

    Windows操作系统是多任务操作系统,它以进程为单位。每个独立执行的程序被称为一个进程,而每个进程又包含多个线程。系统可以分配给每个进程一段使用CPU的时间(CPU时间片),CP…

    Java 2023年6月5日
    074
  • 2022年【米哈游】 金三银四 三月社招内推开始啦!加班少福利好,200+个岗位任你挑选,赶快来看吧!

    米哈游 金三银四 三月内推开始啦 内推类型:社招(校招同学可以使用内推码NTAHEGf进行投递) 内推方式1:直接扫下方专属二维码查看所有在招岗位,并进行投递 内推方式2:将简历发…

    Java 2023年6月8日
    082
  • RabbitMQ——整合SpringAMQP

    一。什么是Spring-AMQP? 1.Spring框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的POJO(Plain Ordinary Jav…

    Java 2023年5月30日
    088
  • Spring Bean生命周期

    本文基于图灵课堂周瑜老师的讲解整理,包括spring bean加载的过程,主要是扫描BeanDefinition以及初始化非懒加载单例Bean两部分,源码取自SpringFrame…

    Java 2023年6月8日
    083
  • centos7 安装 certbot 动态更新Let’s encrypt 证书实现nginx免费ssl证书

    先更新内核,然后安装nginx。启用bbr。 yum install yum-utils vim -y vim /etc/yum.repos.d/nginx.repo 输入: su…

    Java 2023年5月30日
    087
  • python 类与对象

    如果需创建一个类,那么可以使用 class 关键字:实例使用名为 a 的属性,创建一个名为 MyClass 的类: class MyClass: a = 6 现在我们可以使用名为 …

    Java 2023年6月9日
    056
  • 力扣刷题之路——二维数组变换、前缀和数组

    刷题顺序参考:力扣刷题顺序 涉及题目 48. 旋转图像 73. 矩阵置零 289. 生命游戏 238. 除自身以外数组的乘积 旋转图像 自己的解题思路: 题目上说不能使用另一个矩阵…

    Java 2023年6月5日
    097
  • Java_day01

    – 简单性- 面向对象- 可移植性- 高性能- 分布式- 动态性- 多线程- 安全性- 健壮性 Java成功的原因 个人认为在于语言本身的优势之外还有个人电脑的普及、互联网的发展等…

    Java 2023年6月5日
    094
  • MAC电脑安装openJdk

    一、安全brew软件 [1]安全命令地址:https://brew.sh/index_zh-cn /bin/bash -c "$(curl -fsSL https://r…

    Java 2023年5月30日
    077
  • Java IO理解

    Java BIO NIO AIO理解 同步 异步 同步:发起一个调用后,被调用者未处理完请求之前,不返回 异步:发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者…

    Java 2023年6月8日
    085
  • java中远程调用第三方接口

    一、概述 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信…

    Java 2023年5月29日
    090
  • Git配置用户信息和SSH免密

    一、配置用户信息 1.查看配置信息 查看所有配置 $ git config -l/–list 查看系统配置 $ git config –system -l/–list 查看用…

    Java 2023年6月8日
    087
  • Spring PathMatchingResourcePatternResolver

    Spring PathMatchingResourcePatternResolver PathMatchingResourcePatternResolver是ResourcePat…

    Java 2023年6月7日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球