2

私のソフトウェアでは、ObjectOutputStream を介してクライアントとサーバーの間でメッセージを送信する必要があります。

送信者メソッドのコアは次のとおりです。

....

try {
    objWriter.writeUnshared(bean);
    objWriter.flush();
} catch (Exception e) {
    ....
}

...

ネットワーク ケーブルが取り外されたときに Windows XP でアプリケーションを実行すると、writeUnsahred によって例外がスローされます。

今、アプリケーションをubuntu 12.10で実行しようとしていますが、ケーブルを取り外してもメソッドは何もスローしません!

ヒントはありますか??

4

2 に答える 2

1

例外が発生するかどうか、またいつ発生するかは、以下によって異なります。

  • あなたの側のソケット送信バッファの大きさ
  • ピアでのソケット受信バッファの大きさ
  • すでに書き込んだ未確認のデータの量
  • あなたがそれを書いてからどれくらいの期間、そして
  • TCPスタックの内部タイマー。

Javaから制御できるのは、独自のソケット送信バッファーだけです。したがって、例外がいつ配信されるか、また配信されるかどうかは完全に予測できません。したがって、特定の動作に依存するようにアプリケーションを作成してはなりません。

于 2013-01-21T23:17:56.763 に答える
0

はい、しかし writeUnshared と flush によって呼び出されるメソッドに従って、 write(OutputStream.class:106) が呼び出され、ストリームが閉じている場合、このメソッドは例外を生成する必要があることがわかります...その情報を使用して、チャネルがアクティブかどうかを確認します..問題は、ケーブルを取り外してもubuntuでチャネルが開いているように見えることです..

于 2013-01-22T15:36:02.470 に答える