0

私はここで難問に陥っています…</p>

私のクライアント SSLSocket はサーバー (Java ではない) に接続し、期待どおりにバイナリ データを正常に読み書きします。その後、ある時点で、サーバーはクライアントの接続を切断します。ただし、クライアントは例外をスローせずに呼び出すことができ、すべて 0 の IP を返すstartHandshake()ことを除いて、接続が切断されたことを示す兆候は見られません。getLocalSocketAddress()

コードは次のようになります。

SSLSocket socket = (SSLSocket)socketFactory.createSocket(host, port);
socket.setTcpNoDelay(true);
socket.setKeepAlive(true);

/* Socket happily sends/receives data */
socket.getOutputStream().write(myData);
socket.getOutputStream().flush();
socket.getInputStream().read(myBuffer);
// do something with myBuffer

Thread.sleep(20 * 1000);  // During this wait period, server disconnects the client

socket.getLocalSocketAddress();  // returns host:port as expected

socket.startHandshake();  // doing another read/write will also produce the same result

socket.getLocalSocketAddress();  // returns an IP of all zeroes: /0:0:0:0:0:0:1129:6a1f%0:51447
socket.isClosed();  // somehow, returns false!
socket.isConnected();  // somehow, returns true!

socket.getOutputStream.write(myOtherData);  // throws a SocketException: Broken pipe.

基本的に、私の質問は、サーバーがgetLocalSocketAddress()すべて 0 の IP を持っているかどうかを確認する以外に、サーバーが接続を切断したかどうかを判断する方法があると思いますか?

4

1 に答える 1