zoukankan      html  css  js  c++  java
  • IO伪异步实现

    伪异步的实现,通过多线程,也会阻塞,等待连接

    1、创建TcpServer类

    package com.cppdy.tcp;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    //tcp服务端
    public class TcpServer {
    
        public static void main(String[] args) throws Exception {
            
            ExecutorService pool = Executors.newCachedThreadPool();
    
            System.out.println("tcp服务端启动啦……");
            ServerSocket serverSocket = new ServerSocket(8080);
            //伪异步的实现,通过多线程
            while(true) {
                // 也会阻塞在这里,等待连接
                Socket accept = serverSocket.accept();
                pool.execute(new Runnable() {
                    
                    @Override
                    public void run() {
                        try {
    
                            InputStream inputStream = accept.getInputStream();
    
                            byte[] bytes = new byte[1024];
    
                            int length = inputStream.read(bytes);
    
                            String result = new String(bytes, 0, length);
    
                            System.out.println("服务端接收到客户端发送的消息:" + result);
    
                            OutputStream outputStream = accept.getOutputStream();
    
                            PrintWriter printWriter = new PrintWriter(outputStream);
    
                            printWriter.println("服务器收到消息了,这是服务器自动反馈……");
    
                            printWriter.flush();
    
                            accept.shutdownOutput();
                        } catch (IOException e) {
                            e.printStackTrace();
                        } 
                    }
                });
            }
            
        }
    
    }

    2、创建TcpClient类

    package com.cppdy.tcp;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.Socket;
    
    //tcp客户端
    public class TcpClient {
    
        public static void main(String[] args) throws Exception {
    
            Socket socket = new Socket("127.0.0.1", 8080);
    
            try {
                OutputStream outputStream = socket.getOutputStream();
    
                String msg = "吹泡泡的魚";
    
                outputStream.write(msg.getBytes());
    
                System.out.println("客户端发送消息完毕……");
    
                InputStream inputStream = socket.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
    
                String result = br.readLine();
    
                System.out.println("客户端==》服务器返回的结果:" + result);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                socket.close();
            }
        }
    
    }
  • 相关阅读:
    NOI2010 超级钢琴
    [linux][nginx] 常用2
    [linux][nginx] 常用
    [PHP]听说随机数mt_rand()比rand()速度快,闲的无聊测试了一下!
    [linux] 权限问题
    [Laravel] 自带分页实现以及links方法不存在错误
    [YII2] 去除自带js,加载自己的JS,然后ajax(json)传值接值!
    [PHP]PHP设计模式:单例模式
    [html]浏览器标签小图标LOGO简单设置
    [javascript]JS获取当前时间戳的方法
  • 原文地址:https://www.cnblogs.com/jiefu/p/10047336.html
Copyright © 2011-2022 走看看