zoukankan      html  css  js  c++  java
  • java网络通信:同步阻塞式I/O模型(BIO)

    缺点:一个线程只能处理一个客户端连接

    服务端: 

    public class TimeServer {
        public static void main(String[] args) throws IOException {
            int port = 8080;
            ServerSocket server = null;
            try {
                server = new ServerSocket(port);
                System.out.println("The time server is start in port : " + port);
                Socket socket = null;
                while (true) {
                    socket = server.accept();//阻塞直到有新的连接
                    //每监听到一个socket连接就生成一个新的线程来处理
                    new Thread(new TimeServerHandler(socket)).start();
                }
            } finally {
                if (server != null) {
                    System.out.println("The time server close");
                    server.close();
                    server = null;
                }
            }
        }
    }

    事务处理线程:

    public class TimeServerHandler implements Runnable {
        private Socket socket;
        public TimeServerHandler(Socket socket) {
            this.socket = socket;
        }
        @Override
        public void run() {
            BufferedReader in = null;
            PrintWriter out = null;
            try {
                //获取输入输出流
                in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
                out = new PrintWriter(this.socket.getOutputStream(), true);
    
                String currentTime = null;
                String body = null;
                while (true) {
                    body = in.readLine();//阻塞直到有数据读入,或者数据读完或发生异常
                    if (body == null)
                        break;
                    System.out.println("The time server receive order : " + body);
                    currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body) ? new java.util.Date(
                            System.currentTimeMillis()).toString() : "BAD ORDER";
                    out.println(currentTime);//输出
                }
            } catch (Exception e) {
                //处理异常
            }
        }
    }

    客户端:

    public class TimeClient {
        public static void main(String[] args) {
            int port = 8080;
            Socket socket = null;
            BufferedReader in = null;
            PrintWriter out = null;
            try {
                socket = new Socket("127.0.0.1", port);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new PrintWriter(socket.getOutputStream(), true);
                out.println("QUERY TIME ORDER");//发送请求
                System.out.println("Send order 2 server succeed.");
                String resp = in.readLine();//回复
                System.out.println("Now is : " + resp);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (this.socket != null) {
                    try {
                        this.socket.close();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                    this.socket = null;
                }
            }
        }
    }
  • 相关阅读:
    【BZOJ4448】【SCOI2015】情报传递
    【BZOJ2006】【NOI2010】超级钢琴
    NOIp2018模拟赛四十五~??
    【BZOJ4940】【YNOI2016】这是我自己的发明
    数据迁移—datax
    DG模拟GAP手动处理
    DG问题:ORA-16416: No viable Physical Standby switchover targets available
    管理和维护DG
    DG问题
    DG概念与机制
  • 原文地址:https://www.cnblogs.com/nazhizq/p/6538671.html
Copyright © 2011-2022 走看看