
JavaでSocket通信している状態で、物理LANを抜いたりして通信異常状態を起こしても、すぐには通信異常と検知できないようで、一定期間してからSocketExceptionなどを検知します。
現在、クライアントとサーバで常に受信し続け、各々で1秒毎にSocketでメッセージを相互に送っております。
その間で物理LANを抜いても、一定期間は送信しつづけるように見え(実際受信はされていない)、
一定時間を超えると、上記のようにSocketExceptionで例外検知します。
上記のようにSocket通信で通信異常状態の場合には即検知することは無理なのでしょうか?
No.1ベストアンサー
- 回答日時:
はい。
通信経路全体をなにか特別な装置で監視するような仕組みでも
あれば話は別ですが、普通は、通信経路のどこかのLANケーブルが
抜けたからといってすぐにはSocketExceptionは検出されません。
通信経路は、一時的なパケットの紛失が発生する前提で作られて
おり、TCPプロトコルの中には紛失したパケットを再送する機能が
あります。これにより、一時的にLANケーブルが抜けても、
すぐにつなぎ直せば何事もなかったかのように、通信が継続できる
メリットがあります。簡単には障害にしないよう頑張っているということです。
つまり、この再送タイムアウトが発生するまで障害検出されません。
この時間を短くすることは、
http://support.microsoft.com/kb/170359/ja
のように設定変更で可能ですが、他のアプリケーションにも
影響しますので、アプリケーションの都合で変更するのは
お勧めしません。(これはネットワーク環境に応じて変更するものです)
自分のアプリケーションの都合で早めに障害検出をしたい場合は、
1秒毎にSocketでメッセージを相互に送っているとのことですから、
そのメッセージを一定時間以内に受信しなかったら障害とするよう、
自分が必要とする時間でパケットの受信をタイマ監視する処理を
追加すればよいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ソケット通信 同じポート番号...
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
TCP/IPプログラミングでのselec...
-
UdpClient 送信元のIPアドレ...
-
UDPで受信スループットを測定
-
fsockopenのソケットが全然分か...
-
recv関数でフリーズしてしまう
-
ネットワークプログラミングに...
-
UDP通信におけるbind関数について
-
Macターミナルで実行中のプログ...
-
エクセルVBA 大容量CSVファイル...
-
FOM出版の公認テキスト&問題集...
-
vb.netでバッチ処理
-
VB 電卓 メモリー機能
-
Linuxでのシリアル通信について...
-
powershell を使いカレントディ...
-
VBA:CSVファイルの読出し手法...
-
.sb3のファイルを.sb2に変換す...
-
C# シリアル通信でデータ受信...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
Socket通信の0バイト受信について
-
Winsockで接続待ちタイムアウト...
-
ソケットのクローズについて
-
UDP通信におけるbind関数について
-
VB6のwinsockでconnectできない
-
エクセル VBA でのCOMポート...
-
SIPがNATを越えられない理由
-
ソケットでクライアントのipア...
-
UdpClient 送信元のIPアドレ...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
TCP/IPプログラミングでのselec...
-
ソケット通信
-
ソケットのrecvの戻り値が0
-
UDP通信する時に、相手にどうや...
-
vxWorks6.4を使用してソケット...
-
SendRequestでヘッダが受信され...
-
ソケットを用いた1対多通信につ...
-
どうか、POSTでのファイル転送...
おすすめ情報