1

現在、クライアント/サーバー アプリケーションは、データを送受信するたびに新しい接続を開いたり閉じたりしています。永続的な接続が1つになるように変更しようとしています。

私が抱えている問題は、サーバー上のソケットの DataInputStream が、次のデータのバッチを受信するまでブロックしたいときに EOFException をスローし続けることです。

このように単純にサーバーを書くことを考えました...

while socket is open {
    while at socket's DataInputStream's EOF {
        wait a second
    }
    //If we're here, then we have some data
    do stuff
}

...しかし、これは非常に見苦しく、データが受信されるまでブロックする適切な方法ではありません。

読み取るデータがあるまでソケットをブロックするように指示するよりクリーンな方法はありますか? read() と readFully() を試しましたが、どちらも機能しません。

4

1 に答える 1

2

EOFException が発生している場合は、接続が失われていることを意味します。閉じられた接続を待つことはできません。接続を閉じないように、クライアント コードの作業を続けてください。サーバー側では、データが利用可能になるまで、読み取りメソッドのいずれかがブロックされます。

于 2011-01-18T21:38:47.693 に答える