これは、私が特定のコンピューターを使用しているときにのみ発生するように見える、少しあいまいな問題です。今日、私は学校のXPコンピューターでこの問題を抱えていましたが、自宅のコンピューター(W7)ではこれを再現できないようです。
とにかく、Javaでのソケットの読み取り/書き込みは、このコードを使用するたびに問題になる傾向があります(ここで:) int avail, InputStream socket, byte[] buffer, String output
:
while( (avail = input.available()) > 0 )
{
read = input.read( buffer );
output += new String( buffer, 0, read );
}
理にかなっているようですが(一時バッファーで使用できるデータがなくなるまですべてのデータを読み取り、次に文字列で読み取る)、学校のコンピューター(IE7を使用してテスト)では、すべてが一時停止します。input.available()が原因で、スレッドがエンドポイントに到達することなく実行を継続しているため、何らかの理由でブロックされていると思います...事実上、どこかで一時停止しているだけです。
ああ、私は言及するのを忘れました:これをデバッグモードで実行し、各行を段階的に実行するときはいつでも、それは完全に正常に機能します...それは私をさらに混乱させます。
この問題を再現するために家に帰ったとき、それは問題なく動作します(FirefoxとIE8を使用するだけです)。私はこれに代わるより良い方法が何であるかわかりません。
PS:バッファが十分に大きく、私が使用する場合:
read = input.read( buffer );
output += new String( buffer, 0, read );
正常に動作しますが、送信されるデータがバッファサイズを超えるという懸念が常にあります。