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

     
  • 相关阅读:
    Android开发需要注意的地方
    Android开发 --微信支付开发(转载!)(开发工具:Eclipse)
    Android开发---支付宝功能接口(支付功能)(转载!)
    Android开发--推送
    ASP.NET如何发布更新
    如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示
    SQL Server 的远程连接(转载)
    设置如何自动备份数据库并删除2周前的自动备份数据
    如何禁止网页内容被复制以及如何解除禁止(转载并更新!)
    条码生成
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3461662.html
Copyright © 2011-2022 走看看