我有一个使用SSLSocket连接到服务器的客户端。接下来,我尝试使用ObjectOutputStream oos = new ObjectOutputStream(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());发布于 2012-09-28 22:37:49
您必须在创建ObjectInputStream之前创建ObjectOutputStream。
编辑:查看下面的注释。真正的问题是SSL握手很慢,这发生在套接字上的第一个I/O中,在此期间,读操作和写操作都会执行。因此,解决方案是设置读取超时。
https://stackoverflow.com/questions/12642066
复制相似问题