Java ObjectOutputStream永远挂起

Java ObjectOutputStream永远挂起,java,sockets,outputstream,objectoutputstream,Java,Sockets,Outputstream,Objectoutputstream,我有一个使用SSLSocket连接到服务器的客户端。接下来,我尝试使用ObjectOutputStream OOS=newObjectOutputStream(sslsocket.getOutputStream())创建一个OOS 如果服务器端的一切都正常,这就没问题了。但是,我想在我的客户端上放置一些东西,尝试创建ObjectOutputStream,但是如果在60秒内没有发生,请记录错误并继续处理。我看不到任何超时选项。有没有关于如何做到这一点的例子 SSLSocket sslso

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

如果服务器端的一切都正常,这就没问题了。但是,我想在我的客户端上放置一些东西,尝试创建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());
SSLSocket-SSLSocket;
试一试{
setProperty(“javax.net.ssl.trustStore”);
setProperty(“javax.net.ssl.trustStorePassword”);
SSLSocketFactory SSLSocketFactory=(SSLSocketFactory)SSLSocketFactory.getDefault();
sslsocket=(sslsocket)sslsocketfactory.createSocket(InetAddress.getLocalHost(),);
}捕获(可丢弃的e){
logger.logError(如getMessage());
返回null;
}
//这就是它永远悬挂的地方
ObjectOutputStream oos=新的ObjectOutputStream(sslsocket.getOutputStream());
oos.flush();//永远不会到这里
oos.writeObject(订单);
ObjectInputStream ois=新的ObjectInputStream(sslsocket.getInputStream());

您必须在ObjectInputStream之前创建ObjectOutputStream


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

您必须在ObjectInputStream之前创建ObjectOutputStream


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

@PeterLawrey您不必刷新,它是在内部进行的。他完全没有理由需要暂停,它会立即发生。@EJP,你是什么意思?我看到当服务器没有响应时oos的创建将永远挂起我的问题是连接将永远挂起。在我的项目的更大的方案中,如果服务器端出现超出我权限的问题,我希望包括某种类型的超时control@Marianna我怀疑您看到的是ObjectInputStream的创建。没有理由让输出流挂起,它全部进入套接字发送缓冲区,无需等待。我添加了代码和一些注释,以说明我将从何处获得。我把报表打印出来,这样我就可以知道是哪一行了hitting@PeterLawrey你不必冲洗,它发生在内部。他完全没有理由需要暂停,它会立即发生。@EJP,你是什么意思?我看到当服务器没有响应时oos的创建将永远挂起我的问题是连接将永远挂起。在我的项目的更大的方案中,如果服务器端出现超出我权限的问题,我希望包括某种类型的超时control@Marianna我怀疑您看到的是ObjectInputStream的创建。没有理由让输出流挂起,它全部进入套接字发送缓冲区,无需等待。我添加了代码和一些注释,以说明我将从何处获得。我把报表打印出来,这样我就可以知道它在哪一行了