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();
            }
        }
    
    }
  • 相关阅读:
    core文件生成总结
    php 5.2 版本isset()方法小坑
    gdb调试memcached
    mysql的sql优化案例
    php对mongo操作问题
    memcache锁
    php的session实现
    linux指令tips
    php拦截器(魔术方法)
    Nginx源码研究八:nginx监听socket实现流程
  • 原文地址:https://www.cnblogs.com/jiefu/p/10047336.html
Copyright © 2011-2022 走看看