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;
                }
            }
        }
    }
  • 相关阅读:
    Python中xlrd和xlwt模块使用方法
    python正则表达式中含有变量的写法
    python中取整的几种方法
    python request 获取cookies value值的方法
    MySQL数据库初识
    三次登录验证以及购物车
    常用设计模式学习
    test0805
    生成器和各种推导式
    第一类对象 闭包 迭代器
  • 原文地址:https://www.cnblogs.com/nazhizq/p/6538671.html
Copyright © 2011-2022 走看看