-1

Java でサーバー アプリケーションを作成していますが、クライアントがサーバーに接続してストリームを開くと、ストリームが終了して接続が失われます。必要なのは、ストリームが終了してもその接続を維持することです。私が言っていることをよりよく説明するためのコード例を次に示します。

     diSTR = new DataInputStream(Conexao.getInputStream());
     doSTR = new DataOutputStream(Conexao.getOutputStream());
     conectado = true;
     while (diSTR.available() > 0)
     {
        byte[] buffer = new byte[size];
        diSTR.readFully(buffer);
        String str = new String(buffer, "UTF-8");
        log(str);
     }

diSTR.available()メソッドが戻り0、接続が終了した場合、どうすればこの問題を解決できますか?

4

3 に答える 3

1

したがって、diSTR.available() = 0 の場合、メソッドが戻り、接続が終了した場合、どうすればこの問題を解決できますか?

解決策は、使用しないことavailable()です。

このメソッドは、ブロックせずに現在読み取ることができるバイト数を示します。これを使用して「接続が終了しました」と伝えると、相手側またはネットワークがデータの読み取りと処理の速度に追いつかない場合、途中で終了します。反対側が追いつくことができたとしても、リーダーが追いつくために必要なのはネットワークの短い中断であり、接続はあなたの基準に従って「終了」します。

これを行う正しい方法は、読み取り呼び出しが返されるまで入力ストリームを読み取ること-1です。これは「ストリームの終わり」を意味し、もう一方の端が閉じており、それ以上データがないことを示します。

于 2014-10-25T02:24:03.317 に答える
0
于 2014-10-25T02:23:10.673 に答える
0

おそらく java.net パッケージを使用する必要があります。ソケット接続のドキュメントは次のとおりです。

http://docs.oracle.com/javase/tutorial/networking/sockets/

于 2014-10-25T01:39:17.997 に答える