尚硅谷Netty系列学习笔记二《BIO代码简单示例》

目录

前言

代码逻辑

代码

服务器启动步骤

客户端连接步骤

结语

下一节 尚硅谷Netty系列学习笔记三《NIO介绍》


前言

本章用Java实现一个BIO的服务器,客户端直接使用 telnet

代码逻辑

1.创建一个线程池

2.启动一个ServerSocket服务器对象

3.循环监听客户端连接

4.有客户端连接了就要创建一个线程来维护和客户端的链连接

5.线程中监听客户端的输入,并打印到控制台

代码

/**
 * bio服务器
 *
 * @author liuxupeng
 * @date 2021/2/6 16:23
 */
public class BioServer {

    public static void main(String[] args) throws IOException {
        //线程池机制
        //先创建一个线程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        //启动一个Socket服务器
        ServerSocket serverSocket = new ServerSocket(6666);
        System.out.println("服务器启动了");
        while (true) {
            //监听,等待客户端连接,循环的目的是可以监听多个客户端连接
            System.out.println("等待客户端连接");
            //调用accept方法会阻塞等待客户端连接,有客户端连接了就会监听到并且往下执行
            final Socket socket = serverSocket.accept();
            System.out.println("连接到一个客户端了");
            //有过有客户端连接了 就创建一个线程,与之通讯(单独写一个方法)
            executorService.execute(() -> {
                //和客户端通讯
                handler(socket);
            });
        }
    }

    //编写一个handler方法,和客户端通讯
    public static void handler(Socket socket) {
        //声明一个byte数组,用于存储客户端输入的字节流
        byte[] bytes = new byte[1024];
        try {
            //获取客户端的输入流
            InputStream inputStream = socket.getInputStream();
            //循环,因为不知道客户端会发送多少次数据,这里可以循环一直监听客户端的输入
            while (true) {
                //read读取不到数据时会阻塞。
                int read = inputStream.read(bytes);
                //读取到之后往下执行,先判断读取了多少数据,没有数据的话就跳出循环,并关闭连接
                if (read != -1) {
                    //读取到了数据,输出客户端发送的数据
                    System.out.println(Thread.currentThread().getId() + " 说:" + new String(bytes, 0, read));
                } else {
                    //跳出循环
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            System.out.println("关闭客户端连接");
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务器启动步骤

运行main方法,控制台打印如下

客户端连接步骤

使用telnet客户端进行连接

1.首先打开cmd命令窗口

2.输入 telnet 127.0.0.1 6666

此时窗口会进入一个空白命令窗口,同时服务器控制台打印 如下

按住ctry+右括号("}")键 进入如下页面

这时我们发送消息 只需要输入 send + 消息内容 然后按回车键 就可以了

服务器控制台打印如下

这里打印线程id是为了演示,每个连接都会有一个单独的线程去维护,后面我们再开一个客户端,发送下消息看一下,

控制台打印如下。说明两个客户端连接后,在服务器是由两个线程去处理的

结语

本章主要演示BIO的服务端的示例,了解客户端每个连接都需要一个线程来处理。并且客户端无操作时,线程会一直阻塞!

下一节 尚硅谷Netty系列学习笔记三《NIO介绍》

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值