0

ソケット通信でファイルを読み込んでいます。

接続しました。

ファイル アプリケーションの最後を読み取っている間、値/例外/null は返されません。まだ入力を待っています。

これを処理する方法。

次のコードを試しました:

 is = clientsocket.getInputStream();

     // create new input stream reader
     isr = new InputStreamReader(is);

     // create new buffered reader
     br = new BufferedReader(isr);

     String value;

     // reads to the end of the stream 
     while((value = br.readLine()) != null)
     {
        // converts int to character
       // char c = (char)value;

        // prints character
        System.out.println(value);
        System.out.println(br.readLine());
     }
4

1 に答える 1

1

SO投稿の1つから:

読み取りがハングする場所で停止するだけの問題は、これが 2 つのケースで発生する可能性があることです。

1: サーバーには送信するデータがありません

2: サーバーはさらにデータを送信しましたが、ネットワークの過負荷のため、クライアントはまだデータを受信して​​いません。

そして、最初のケースでは読み取りを本当に停止したいだけですが、2番目のケースでは読み取りをブロックしたいと考えています。

これを解決する方法は、サーバーが送信する予定のデータ量をクライアントに伝えることができる転送プロトコル (標準) を作成することです。

サーバーが合計データ サイズを事前に知っている場合は、転送の合計バイト数を送信することから始めてから、データを送信します。そうすれば、クライアントはすべてのデータをいつ受信したかを知ることができます。

(または、サーバーは完了時に接続を単純に閉じることができます。その方法では読み取りは失敗するはずですが、これは将来接続が必要ない場合にのみ機能します)

于 2013-05-18T06:13:19.257 に答える