当前位置:  开发笔记 > 编程语言 > 正文

ObjectOutputStream永远挂起

如何解决《ObjectOutputStream永远挂起》经验,为你挑选了1个好方法。

我有一个使用SSLSocket连接到服务器的客户端.接下来,我尝试创建一个OOSObjectOutputStream 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());

user207421.. 5

您必须在ObjectInputStream之前创建ObjectOutputStream.

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



1> user207421..:

您必须在ObjectInputStream之前创建ObjectOutputStream.

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

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有