ObjectOutputStream中永远挂(ObjectOutputStream hanging

2019-09-23 04:14发布

我有一个连接到使用SSLSocket的一个服务器的客户端。 接下来,我尝试创建具有OOS ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream());

如果一切都在服务器端运行良好,这是好的。 不过,我想放的东西在地方上尝试创建的ObjectOutputStream我的客户端,但如果没有在60秒内发生的事情,记录错误并继续处理。 我没有看到这方面的任何超时选项。 如何任何的例子可以这样做?

     SSLSocket sslsocket;
     try {
            System.setProperty("javax.net.ssl.trustStore", <myKeystore>);
            System.setProperty("javax.net.ssl.trustStorePassword", <myPW>);
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            sslsocket = (SSLSocket) sslsocketfactory.createSocket(InetAddress.getLocalHost(), <myPort>);

     } catch (Throwable e) {
            logger.logError(e.getMessage());
            return null;
     }

      // This is where it hangs forever
      ObjectOutputStream oos = new ObjectOutputStream(sslsocket.getOutputStream());
      oos.flush(); // never gets here
      oos.writeObject(orders);

      ObjectInputStream ois = new ObjectInputStream(sslsocket.getInputStream());

Answer 1:

你要创建的ObjectInputStream之前用ObjectOutputStream。

编辑:请参见下面的评论。 真正的问题是一个缓慢的SSL握手,这恰好在第一I / O插槽上,并在此期间,作为写入的读取进行为好。 因此,解决办法是设置读取超时。



文章来源: ObjectOutputStream hanging forever