【问题标题】:Java getting ObjectInputStream ObjectOutputStream from a socketJava 从套接字获取 ObjectInputStream ObjectOutputStream
【发布时间】:2017-09-06 09:14:13
【问题描述】:

我有一个基于服务器-多客户端交互的应用程序。这是我在服务器类中使用的线程,用于创建一个接受所有新套接字的新线程:

    Thread acceptingThread = new Thread(new Runnable() {

        @Override
        public void run() {
            while (true) {
                try {
                    Socket s = serverSocket.accept();
                    listaSocket.add(s);
                    listaOis.add(new ObjectInputStream(s.getInputStream()));
                    listaOos.add(new ObjectOutputStream(s.getOutputStream()));
                    System.out.println("Client connected");
                } catch (IOException ex) {
                    Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }

    });
    acceptingThread.start();




private ServerSocket serverSocket;
private ArrayList<Socket> listaSocket;
private ArrayList<ObjectInputStream> listaOis;
private ArrayList<ObjectOutputStream> listaOos;

阻止程序的行是:

                    listaOis.add(new ObjectInputStream(s.getInputStream()));
                    listaOos.add(new ObjectOutputStream(s.getOutputStream()));

【问题讨论】:

  • 读取ObjectInputStream的构造函数的javadoc。
  • 我认为 serverSocket.accept() 正在阻塞程序,它等待新请求的到来。
  • 在我的客户端中,我正在创建一个连接到该服务器的套接字。在我从客户端获取套接字。ObjectInputStream 在他的构造函数中获取一个 InputStream。我从 s.getInputStream()

标签: java sockets objectinputstream objectoutputstream


【解决方案1】:

您的代码在此特定行中阻塞:

                    listaOis.add(new ObjectInputStream(s.getInputStream()));

注意这个ObjectInputStream 构造函数的行为。来自Javadoc

创建一个从指定 InputStream 读取的 ObjectInputStream。从流中读取序列化流标头并进行验证。 此构造函数将阻塞,直到相应的 ObjectOutputStream 写入并刷新了标头。

从传入连接中获取InputStream意味着需要通过连接发送序列化数据。这意味着您必须在构造函数继续执行之前执行以下操作:

  1. 从客户端连接。我想你已经在这样做了,因为你可以通过socket.accept()
  2. 使用新连接打开OutputStream
  3. ObjectOutputStream 包裹OutputStream
  4. 通过ObjectOutputStream 发送一些数据(即将一些可序列化的数据写入其中并刷新)。

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2014-10-18
    • 2015-01-05
    • 2011-07-18
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    相关资源
    最近更新 更多