ObjectOutputStream永远挂起

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

如果一切都在服务器端运行良好,这很好。 但是,我想在客户端尝试创建ObjectOutputStream,但如果在60秒内没有发生,请记录错误并继续处理。 我没有看到任何超时选项。 有关如何做到这一点的任何例子?

  SSLSocket sslsocket; try { System.setProperty("javax.net.ssl.trustStore", ); System.setProperty("javax.net.ssl.trustStorePassword", ); SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); sslsocket = (SSLSocket) sslsocketfactory.createSocket(InetAddress.getLocalHost(), ); } 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()); 

您必须在ObjectInputStream之前创建ObjectOutputStream。

编辑:见下面的评论。 真正的问题是慢速SSL握手,它发生在套接字上的第一个I / O中,并且在此期间执行读取以及写入。 所以解决方案是设置读取超时。