- PR -

socketの接続について

1
投稿者投稿内容
freedom56
会議室デビュー日: 2003/12/15
投稿数: 4
投稿日時: 2005-09-06 21:44
はじめて投稿させていただきます。

基本的な質問かもしれませんが、socketがつながっているかいないかを調べる方法は無いのでしょうか?

よろしくお願いします。

[ メッセージ編集済み 編集者: freedom56 編集日時 2005-09-06 21:59 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-06 22:08
まず API を見ましょう。けっこうまんまの名前のメソッドがありました。
http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#isConnected()
freedom56
会議室デビュー日: 2003/12/15
投稿数: 4
投稿日時: 2005-09-06 22:27
返信ありがとうございました。

ありましたね…。しかしバージョンが1.4からですか…。今使っているjavaがバージョンが1.2で、しかもヘルプも1.2用を使っているところのものだったもので気づきませんでした。
今度、バージョンをあげてもらえるように頼んでみます。



あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-09-07 01:11
ちょっと気になって調べてみたんですが、
isConnected()は「connect()の呼び出しが成功したか」を示すようです。
「現在も通信相手と正常に接続しているか」を示すわけではありません。
close()を呼んだ後でもtrueを返し続けます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-09-07 10:35
>isConnected()は「connect()の呼び出しが成功したか」を示すようです。
なるほど。そういうものなんですね。"isConnecting"じゃないから、closeを読んでも true が返るんでしょうか。
TCP/IPの仕組みからして、どうせケーブルが抜けてもすぐには検出できません。
より積極的に接続状況を把握する必要があれば一定間隔でハートビートを送受信するような仕組みを実装する必要があるかもしれませんね。
freedom56
会議室デビュー日: 2003/12/15
投稿数: 4
投稿日時: 2005-09-08 22:46
あしゅさん、インギさん返信ありがとうございました。

ちょっとしたプログラムを書いてみたのですが、確かに、isConnectは、「相手先との接続に成功したか」を返すもので、接続状態を返すものではないようでした。
それと、isClosedというのも試してみたのですが、こちらはclosed()を実行後、ちゃんと切断されたと結果が返ってきました。ただし、突発的な切断などは試せなかったので、試していないのでなんともいえないのですが…。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2005-09-08 22:59
そもそもソケットがconnected, closedであるかは取得できたとしても、
接続がアクティブであるかは接続先に関係するので判断できないですよ。
判断できたとしても次の瞬間に切れてる可能性だってあるわけで。

それで、(Javaに限らず)常套手段としては読み書きに失敗したら切断と
みなすわけです。アプリよりもう少し下位のレイヤーでどのくらいで
切断されたかとみなすかといったパラメータをいじることもありますが。

このあたりの情報はあくまでヒントとして扱う事をオススメします。
1

スキルアップ/キャリアアップ(JOB@IT)