- PR -

【ネットワーク通信】Soketのタイムアウトについて

1
投稿者投稿内容
Face
常連さん
会議室デビュー日: 2003/06/22
投稿数: 43
投稿日時: 2006-03-24 15:40
現在、ソケットを用いて、サーバーとの接続を確認
するクラスを作成しているのですが、
ネットワークがつながっていないとき(サーバーが見えない時)

String host = "http://192.168.1.1";
int port = 1000;
sock = new Socket(host,port);

とすると「new Socket()」部分にて数十秒かかります。
(※長いときで2分程度)

つながらない場合、この時間を1秒程度で例外を発生するように
したいのですが、Javaのバージョンが「Personal Profile」
のため下記方法で行ってみた場合「InetSocketAddress」
の部分で「NoClassDefoundError」となってしまいます。

InetSocketAddress socketAddress = new InetSocketAddress(sHost, iPort);
sock = new Socket();
sock.connect(socketAddress,1000);

「sock = new Socket(host,port);」のソケット作成処理にて
タイムアウトの時間設定をする方法はないでしょうか。

下記動作環境になります。
OS:WindowsCE5.0
VM:EVM

ネットワークプログラミング詳しい方いらっしゃったら
ご指導願えませんでしょうか。
よろしくお願いいたします。

また、サーバーと通信可能かを判断したいというところが
目的ですので、ソケット以外に他の方法が
あれば助言お願いいたします。

悶吉
会議室デビュー日: 2004/03/30
投稿数: 14
投稿日時: 2006-03-24 16:37
new Socket(host,port)でインスタンスを生成してしまうと
バインド・接続まで行ってしまうので、

接続しないようにインスタンスを生成
バインド
接続

をそれぞれ別に行えばOKのはずです。
APIドキュメントの
# bind(SocketAddress bindpoint)
#connect(SocketAddress endpoint,int timeout)
あたりを参照してみてください。

#すいません斜め読みしてました。試されたんですよね_| ̄|○
コンストラクタに

Socket(SocketImpl impl)
ユーザが指定した SocketImpl を使用して、接続されていないソケットを作成します

というのがあります。
ここら辺から攻めてみてはいかがでしょう。
[ メッセージ編集済み 編集者: 悶吉 編集日時 2006-03-24 16:39 ]



[ メッセージ編集済み 編集者: 悶吉 編集日時 2006-03-24 16:52 ]
ゆう
常連さん
会議室デビュー日: 2003/06/27
投稿数: 45
投稿日時: 2006-03-24 16:44
引用:

下記動作環境になります。
OS:WindowsCE5.0
VM:EVM



 EVMでは、せいぜいJava1.3相当の機能しかないような気がします。その場合、
1.4で追加されたconnectメソッドなどは使用できません。JVMの提供元にAPIなど
があると思いますので、未確認ならば確認した方がよいと思います。

 ネットワークのプロパティに、sun.net.client.defaultConnectTimeoutなどの
タイムアウト関連のものがあります。こちらもEVMでは有効かどうかわかりませんが、
試してみては。


引用:

また、サーバーと通信可能かを判断したいというところが
目的ですので、ソケット以外に他の方法が
あれば助言お願いいたします。



Runtimeのexecからpingを実行する。
ネットワークも詳しくないので、これぐらいしか思いつきません。

[ メッセージ編集済み 編集者: 悠 編集日時 2006-03-24 17:04 ]
1

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