zoukankan      html  css  js  c++  java
  • java之Socket多线程传递对象

    服务器端利用线程池回复客户端:

    public class Server implements Runnable {
    
        private final ServerSocket server;
        private final ExecutorService pool;
    
        public Server(int port, int poolSize) throws IOException {
            this.server = new ServerSocket(port);
            this.pool = Executors.newFixedThreadPool(poolSize);
        }
    
        public void run() {
            while (true) {
                Socket socket;
                try {
                    socket = this.server.accept();
                    pool.execute(new ServerRepleyLines(socket));
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    
        }
    
    }
    ServerRepleyLines类具体代码,里面用到的数据类可以暂不考虑:
    public class ServerRepleyLines extends Thread {
    
        private DBHelper helper;
        private Socket client;
    
        public ServerRepleyLines(Socket client) {
            this.client = client;
            this.helper = new DBHelper();
        }
    
        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                ObjectInputStream fin = new ObjectInputStream(
                        new BufferedInputStream(this.client.getInputStream()));
                try {
                    TicketInfo qa = (TicketInfo) fin.readObject();
                    System.out.println(qa.getStarting_station());
                    if (qa.getType() == 2) {
                        LineInfos lines = this.helper.getAllLineInfos(
                                qa.getStarting_station(), qa.getTerminal_station(),qa.getDate_time().toString());
                        ObjectOutputStream fout = new ObjectOutputStream(
                                client.getOutputStream());
                        fout.writeObject(lines);
                        fout.flush();
                    }
                    fin.close();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
    }
    
    

    客户端Socket传输对象:

    public LineInfos sendAndGetLinesInfo(TicketInfo ticket) {
            Socket socket = this.CreateASocket(2);
            try {
                ObjectOutputStream fout = new ObjectOutputStream(
                        socket.getOutputStream());
                fout.writeObject(ticket);
                fout.flush();
                LineInfos lines = null;
                ObjectInputStream fin = new ObjectInputStream(
                        new BufferedInputStream(socket.getInputStream()));
                try {
                    lines = (LineInfos) fin.readObject();
                    fin.close();
                } catch (ClassNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                fout.close();
                return lines;
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

    核心代码就这些:

    调用开启线程:Server server=new Server2(6668,3);  server.start();

     
  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3461662.html
Copyright © 2011-2022 走看看