- - PR -
socketの接続について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-09-06 21:44
はじめて投稿させていただきます。
基本的な質問かもしれませんが、socketがつながっているかいないかを調べる方法は無いのでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: freedom56 編集日時 2005-09-06 21:59 ] |
|
投稿日時: 2005-09-06 22:08
まず API を見ましょう。けっこうまんまの名前のメソッドがありました。
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#isConnected() |
|
投稿日時: 2005-09-06 22:27
返信ありがとうございました。
ありましたね…。しかしバージョンが1.4からですか…。今使っているjavaがバージョンが1.2で、しかもヘルプも1.2用を使っているところのものだったもので気づきませんでした。 今度、バージョンをあげてもらえるように頼んでみます。 |
|
投稿日時: 2005-09-07 01:11
ちょっと気になって調べてみたんですが、
isConnected()は「connect()の呼び出しが成功したか」を示すようです。 「現在も通信相手と正常に接続しているか」を示すわけではありません。 close()を呼んだ後でもtrueを返し続けます。 |
|
投稿日時: 2005-09-07 10:35
>isConnected()は「connect()の呼び出しが成功したか」を示すようです。
なるほど。そういうものなんですね。"isConnecting"じゃないから、closeを読んでも true が返るんでしょうか。 TCP/IPの仕組みからして、どうせケーブルが抜けてもすぐには検出できません。 より積極的に接続状況を把握する必要があれば一定間隔でハートビートを送受信するような仕組みを実装する必要があるかもしれませんね。 |
|
投稿日時: 2005-09-08 22:46
あしゅさん、インギさん返信ありがとうございました。
ちょっとしたプログラムを書いてみたのですが、確かに、isConnectは、「相手先との接続に成功したか」を返すもので、接続状態を返すものではないようでした。 それと、isClosedというのも試してみたのですが、こちらはclosed()を実行後、ちゃんと切断されたと結果が返ってきました。ただし、突発的な切断などは試せなかったので、試していないのでなんともいえないのですが…。 |
|
投稿日時: 2005-09-08 22:59
そもそもソケットがconnected, closedであるかは取得できたとしても、
接続がアクティブであるかは接続先に関係するので判断できないですよ。 判断できたとしても次の瞬間に切れてる可能性だってあるわけで。 それで、(Javaに限らず)常套手段としては読み書きに失敗したら切断と みなすわけです。アプリよりもう少し下位のレイヤーでどのくらいで 切断されたかとみなすかといったパラメータをいじることもありますが。 このあたりの情報はあくまでヒントとして扱う事をオススメします。 |
1