0

ローカルマシンでSSLServerSocketプログラムを試してみようとしています-(このプログラムは、サーバーオブジェクトのコンストラクターへの単一のパラメーターに基づいてプレーンソケットまたはSSLソケットのいずれかを使用することを目的としています)。プレーンデータでは、プログラムは期待どおりに機能しますが、SSLを使用します。

socket.getInputStream().read();

リモートエンドが閉じている場合でも、常に65535(つまり、0xFFFF)を返します。何が問題なのか分かりますか?それが助けになるなら、私はコードを投稿することができます。

前もって感謝します

編集:わかりました、今私は目を覚ましています-以下の人が正しく指摘しているように、それは「切断」のようなものです(isClosedはまだfalseを返しますが、入力ストリームには-1しかありません)。

SSLのデバッグ情報を見ると、次のような宝石に気づきました。

***
pool-2-thread-1, WRITE: TLSv1.1 Handshake, length = 36
%% Cached server session: [Session-3, TLS_ECDHE_RSA_WITH_RC4_128_SHA]
pool-2-thread-1, received EOFException: ignored
pool-2-thread-1, called closeInternal(false)
pool-2-thread-1, SEND TLSv1.1 ALERT:  warning, description = close_notify
pool-2-thread-1, WRITE: TLSv1.1 Alert, length = 22
pool-2-thread-1, called closeSocket(selfInitiated)
After use

コードから:

final SSLSocket socket = (SSLSocket) ((SSLServerSocket)_ServerSocket).accept();
System.out.println("Before use");
socket.getInputStream().read();
System.out.println("After use");

したがって、クライアント側(この場合はブラウザ)が適切に「さようなら」と言わずに電話を切っていると思います。

私の使用目的がSSL/TLSを介したWebソケット(wss:// localhost:/)であるため、証明書のセットアップを追加してWindows 7の信頼できる証明書に追加しようとしましたが、それでも機能しないようです( htmlファイルは私のローカルシステムにあり、接続は上記のwss:URLにあるので、keygen.exeのサーバーエイリアスはlocalhostである必要がありますか?)。

私がまだ間違っているところはありますか?

4

1 に答える 1

0

あなたは間違っています。read()が0xFFFFを返すことはありません。ただし、ピアが閉じられると-1 (0xFFFFFFFF)を返します。Javadocを参照してください。結果をバイトではなくintに格納する必要があるため、データのバイトとしてEOSと0xFFを意味する-1を区別できます。

于 2012-11-26T02:49:30.660 に答える