1

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());
4

1 に答える 1

5

ObjectInputStream の前に ObjectOutputStream を作成する必要があります。

編集:以下のコメントを参照してください。実際の問題は、SSL ハンドシェイクが遅いことでした。これは、ソケットの最初の I/O で発生し、その間に読み取りと書き込みが実行されます。したがって、解決策は読み取りタイムアウトを設定することでした。

于 2012-09-28T14:37:49.180 に答える