質問: 現在、javaを使用してプログラムを作成しているのですが、closeされたsocketに対しての動作について質問があります。 クライアント側のプログラムに ObjectOutputStream.writeObject(send); ObjectOutputStream.flush(); ObjectInputStream.readObject(); というものがあったとします。 サーバ側でsocketをcloseし、上記のプログラムを走らせた場合writeObjectにてsocketExceptionを検出する場合とreadObjectでEOFExceptionを検出する場合の2パターンが起こりうるのですが、これはなぜでしょうか? また、サーバ側でのsocketのcloseをクライアント側で検知する為には、IOExceptionで上記2つのExceptionをcatchするべきですか?それとも、SocketExceptionとEOFExceptionをそれぞれcatchするべきなんでしょうか? なお、上記のwriteObjectの引数のsendはSerializeを継承して作成した自作クラスのオブジェクトです。
回答: いろいろとウソを書いていたようだ。orz 返す、じゃなくて、投げるだし。 >writeObjectにてsocketExceptionを検出 >readObjectでEOFExceptionを検出 前者はストリームは正常で、ソケットがエラーを投げている、 後者は、ストリームが、もうデータは無いよ、と言っている。 そもそも違うことをやっているのに、 同じエラーじゃないのが、何がおかしいの? 「検知してどうするの?」と書いたのは、 検知したところで、何かしなきゃならないのは、 サーバー側だからです。 IOExceptoinですませるかどうかは、 検知したあと、どうしたいかによる。 でも、サーバーもどきを、 まともなサーバーにすれば、必要ない話でしょ。