首页 > 编程语言 >Java - BIO 总结

Java - BIO 总结

时间:2022-08-28 16:13:12浏览次数:52  
标签:总结 BIO Java socket 线程 new public 服务端 Socket

BIO 介绍

BIO 编程方式通常是在 JDK1.4 版本之前常用的编程方式。编程实现过程为:首先在服务端启动一个 ServerSocket 来监听网络请求,客户端启动 Socket 发起网络请求,默认情况下 ServerSocket 回建立一个线程来处理此请求,如果服务端没有线程可用,客户端则会阻塞等待或遭到拒绝。同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

BIO 图示

代码实现

服务端

public class Server {
    public static void main(String[] args) throws IOException {
        // 1.定义一个serverSocket,并定义端口是 9999
        ServerSocket ss = new ServerSocket(9999);
        while(true){
            // 2.监听k客户端的socket请求
            Socket socket = ss.accept();
            new SocketThread(socket).start();
        }
    }
}

处理实现

public class SocketThread extends Thread{
    private Socket socket;

    public SocketThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            // 1.从客户端传来的socket里面获取到流
            InputStream is = socket.getInputStream();
            // 2.将字节输入流包装成一个缓冲字符输入流
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String msg;
            while((msg = br.readLine())!=null){
                System.out.println("服务端接受到信息:"+msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端

public class Client {
    public static void main(String[] args) throws IOException {
        // 1.创建socket将对象请求服务端的链接
        Socket socket = new Socket("127.0.0.1",9999);
        // 2.从socket对象中获取一个字符输出流
        OutputStream os = socket.getOutputStream();
        PrintStream ps = new PrintStream(os);
        Scanner scanner = new Scanner(System.in);
        while(true){
            System.out.print("请说:");
            String msg = scanner.nextLine();
            ps.println(msg);
            // 推送发送内容给服务端
            ps.flush();
        }
    }
}

标签:总结,BIO,Java,socket,线程,new,public,服务端,Socket
From: https://www.cnblogs.com/feiqiangsheng/p/16632940.html

相关文章

  • Java我的高效编程之环境搭建
    前言:刚毕业,工作之余写博客有利于提高技术,更是能帮助人,接下来会认认真真写好每一篇博客。希望大家多多支持。废话不多说,马上开始。这是一篇环境搭建的博客。jdk+eclipse+s......
  • java helloworld demo
    大二的时候写过web仅限于idea配合springboot,学习的时候需要写个javademo或者算法,居然不知道怎么写了首先创建一个文件夹,写上你的代码,因为是demo,所以不......
  • Java入门
    Java的特性及优势:简单性面向对象可移植性高性能分布式动态式多线程安全性健壮性Java的三大版本JavaSE:标准版(桌面程序,控制台开发…)JavaME:嵌入式开发(手机,小家电…)JavaEE:E企业......
  • 解决eclipse中的Java文件,使用idea打开的乱码问题
    吐槽:在克隆一些Github上面资源的时候,使用idea打开,会出现乱码的情况......
  • java判断list里是否有重复元素/元素是否完全相同
    判断list里是否有重复元素/元素是否完全相同_wuwujian111的博客-CSDN博客_判断list中所有值是否相同 https://blog.csdn.net/javaofliang/article/details/46358083充分......
  • Java8 新特性之流式数据处理
    一.流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现......
  • 第1章 java入门
    主要内容:Java的地位Java的诞生java的特点安装JDK简单的java应用程序注释编程风格反编译1.1java的地位 ......
  • Java 解析Tiff深入研究
        最近在读取客户发过来的tiff文件是,底层竟然报错了,错误:bandOffsets.lengthiswrong!  没办法,因为错误消息出现在tiff的read中,因此就对底层序中tiff读取的代......
  • Java基础入门
    Java配置环境系统环境变量设置NameValueJAVA_HOMED:\Environment\java\jdk-14.0.1CLASSPATH;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;Pat......
  • Java synchronized锁升级过程验证
    ​Java对象结构 ​  一个对象包括三部分:对象头实例数据对其填充 对象头:MarkWord:用于存储对象自身运行时的数据,如哈希码(HashCode),GC分代年龄,锁状态标志,......