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();

     
  • 相关阅读:
    nginx 阻止ip访问
    mysql sql语句性能分析
    SWFUpload demo
    XSHELL win7 和 linux 系统之间文件互传
    基于HTTP协议的轻量级开源简单队列服务:HTTPSQS
    The following packages have been kept back
    php 错误日志记录
    TWIG 分页宏(基于 bootstrap)
    gitconfig 全局配置文件。
    简单的图片异步上传代码
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3461662.html
Copyright © 2011-2022 走看看