zoukankan      html  css  js  c++  java
  • Socket

    Java中的网络编程,指的就是Socket

    传统IO服务写法:

    【客户端】

    package com.zy.socket;
    
    import java.io.IOException;
    import java.net.Socket;
    import java.util.Date;
    
    public class SocketClient {
        public static void main(String[] args) {
            new Thread(() -> {
                try {
                    Socket socket = new Socket("127.0.0.1", 9231);
                    while (true) {
                        try {
                            socket.getOutputStream().write((new Date() + ": hello world").getBytes());
                            socket.getOutputStream().flush();
                            Thread.sleep(2000);
                        } catch (Exception e) {
                            
                        }
                    }
                } catch (IOException e) {
                }
            }).start();
        }
    }

    【服务端】

    package com.zy.socket;
    
    import java.io.IOException;
    import java.net.Socket;
    import java.util.Date;
    
    public class SocketClient {
        public static void main(String[] args) {
            new Thread(() -> {
                try {
                    Socket socket = new Socket("127.0.0.1", 9231);
                    while (true) {
                        try {
                            socket.getOutputStream().write((new Date() + ": hello world").getBytes());
                            socket.getOutputStream().flush();
                            Thread.sleep(2000);
                        } catch (Exception e) {
                            
                        }
                    }
                } catch (IOException e) {
                }
            }).start();
        }
    }

    但是上面的写法存在问题,即没来一个新的socket连接,系统就必须开启一个新的线程去处理,久而久之,当高并发时,系统会吃不消

    下面是才用线程池的改良版

    【服务端】

    package com.zy.socket;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class SocketServerPool {
        public static void main(String[] args) throws Exception {
    
            ServerSocket serverSocket = new ServerSocket(9231);
            ExecutorService pool = Executors.newFixedThreadPool(5);
            new Thread(() -> {
                while(true) {
                    try {
                        
                        // accept是阻塞的,只有当当前socket接收到信息时,才会往下执行
                        Socket socket = serverSocket.accept();
                        pool.submit(new MySocketTask(socket));
                        
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            }).start();
        
        }
    }
    
    
    class MySocketTask implements Runnable {
        private Socket socket;
    
        public MySocketTask(Socket socket) {
            this.socket = socket;
        }
    
        @Override
        public void run() {
            System.out.println("正在执行socket:"+Thread.currentThread().getName());
            try {
                byte[] data = new byte[1024];
                InputStream inputStream = socket.getInputStream();
                while(true) {
                    int len;
                    
                    while((len = inputStream.read(data)) != -1) {
                        System.out.println(new String(data, 0, len));
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
            }
            System.out.println("socket 执行完毕");
        }
    }
  • 相关阅读:
    VisionPro CogDistanceSegmentSegmentTool工具的功能原理
    VisionPro CogDistanceSegmentLineTool工具
    VisionPro CogDistanceSegmentEllipseTool工具 几何测量工具
    VisionPro CogDistanceSegmentCircleTool工具 几何测量工具
    VisionPro CogDistancePointPointTool 几何测量工具
    VisionPro CogDistancePointSegmentTool工具 几何测量工具
    VisionPro CogDistancePointLineTool工具
    VisionPro CogDistancePointCircleTool工具
    VisionPro CogDistancePointEllipseTool工具
    VisionPro CogDistanceLineEllipseTool 几何测量工具
  • 原文地址:https://www.cnblogs.com/zyxiaohuihui/p/11176795.html
Copyright © 2011-2022 走看看