Javaのソケットを使ったとき、クライアント側の立場に立った場合以下の状況を考慮する必要が生じました。
1.サーバー側からの応答待ちの時に、ケーブルが抜けた。
2.サーバー側からの応答待ちの間に、サーバー側でソケットをclose()してしまった。
このとき、どうなるのか?結論として、
1.のときはSocketExceptionが発生する。
2.のときは、読み込んだ値が -1 や null となる(例外は発生しない)
1.のときですが、ケーブルが外れた瞬間にSocketExceptionが発生します。
2.ですが、タイミングはわかりませんがInputStreamからバイト配列として読み込んだ場合は読み込んだバイト数が-1で返されます。BufferedReaderなどからreadLine等で文字列として読み込む場合は、nullオブジェクトが返されます。
以上。(JDK1.4)
コメント