×

bio

温故知新-BIO

我的笔记 我的笔记 发表于2020-05-31 21:18:10 浏览2797 评论0

抢沙发发表评论

最近几天又看了看BIO和NIO,今天记一下BIO的一个小例子

package com.fyd.bio;

import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/***
 * @Author付亚东
 * @Date 2020/5/26 20:57
 ****/
public class BIOServer {

    public static void main(String[] args) throws Exception{
        //1.创建一个线程池
        ExecutorService executorService = Executors.newCachedThreadPool();
        //2.创建一个serversocker
        ServerSocket serverSocket = new ServerSocket(6666);
        System.out.println("服务器启动了");
        while (true){
            //等待客户端链接
            Socket socket = serverSocket.accept();
            System.out.println("链接一个客户端");
            //创建一个线程通讯
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    handler(socket);
                }
            });
        }

    }

    /***
     * 编写handler方法通信
     * @param socket
     */
    private static void handler(Socket socket){
        InputStream inputStream=null;
        System.out.println("线程信息");
        System.out.println("线程id"+Thread.currentThread().getId());
        System.out.println("线程name"+Thread.currentThread().getName());
        try {
            byte[] bytes = new byte[1024];
            //获取客户端的输入流
            inputStream = socket.getInputStream();
            while (true){
                int i = inputStream.read(bytes);
                if(i!=-1){
                    System.out.println("客户端数据:"+new String(bytes,0,i));
                }else {
                    break;
                }
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(inputStream!=null){
                    inputStream.close();
                }
                if(socket!=null){
                    socket.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}


可以使用telnet当做客户端

telnet 127.0.0.1 6666

image.png

链接成功后,按Ctrl+]

image.png

发送数据:

image.png

服务端接受数据:


image.png


我的笔记博客版权我的笔记博客版权