zoukankan      html  css  js  c++  java
  • BIO的简单Demo

    package jesse.test1;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.Executor;
    import java.util.concurrent.Executors;
    
    public class DemoServer extends Thread{
        
        private ServerSocket serverSocket;
        
        public int getPort(){
            return serverSocket.getLocalPort();
        }
        
        public void run(){
            try {
                serverSocket = new ServerSocket(0);
                //使用多线程实现
                Executor executor = Executors.newFixedThreadPool(8);
                while(true){
                    Socket socket = serverSocket.accept();
                    RequestHandler requestHandler = new RequestHandler(socket);
                    /*requestHandler.start();*/
                    executor.execute(requestHandler);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(serverSocket != null){
                    try {
                        serverSocket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        
        public static void main(String[] args) {
            DemoServer server = new DemoServer();
            server.start();
            try {
                Socket client = new Socket(InetAddress.getLocalHost(), server.getPort());
                BufferedReader bufferReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
                System.out.println(bufferReader.readLine());
                
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
    /**
     * 1、服务端ServerSocket,启动绑定端口
     * 2、调用accept,阻塞等待客户端连接
     * 3、客户端连接后,启动一个单独线程负责处理客户端请求
     * 
     * 也可以使用多线程来处理连接不是很多的情况
     */
    
    
    class RequestHandler extends Thread{
        private Socket socket;
    
        public RequestHandler(Socket socket) {
            this.socket = socket;
        }
        
        @Override
        public void run(){
            try {
                PrintWriter out = new PrintWriter(socket.getOutputStream());
                out.println("Hello World");
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
    }
  • 相关阅读:
    分布式任务调度 xxl-job
    【线上】 select * from xxoo where 1=1应用挂掉
    【死磕ES】七、基础检索
    【死磕ES】四、基本操作
    【死磕ES】三、基本概念
    【死磕ES】二、搭建环境
    Mac共享文件夹
    微信小程序下拉刷新,上拉加载
    微信小程序textarea输入框出现[object Object]
    微信小程序official-account的使用
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9965100.html
Copyright © 2011-2022 走看看