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();
            }
        }
        
    }
  • 相关阅读:
    使用Spring AOP实现业务依赖解耦
    对Java提供的锁机制的一些思考
    关于数据库优化的一些想法
    漫谈使用Kafka作为MQ中间件
    数据库事务隔离引发的关于锁机制的思考
    使用Redis作为高速缓存
    Docker 构建映像
    Centos7 Nginx开机启动
    Docker 设置固定网络IP
    CentOS docker 常用命令
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9965100.html
Copyright © 2011-2022 走看看