- - PR -
【ネットワーク通信】Soketのタイムアウトについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 ネットワークプログラミング詳しい方いらっしゃったら ご指導願えませんでしょうか。 よろしくお願いいたします。 また、サーバーと通信可能かを判断したいというところが 目的ですので、ソケット以外に他の方法が あれば助言お願いいたします。 | ||||||||
|
投稿日時: 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 ] | ||||||||
|
投稿日時: 2006-03-24 16:44
EVMでは、せいぜいJava1.3相当の機能しかないような気がします。その場合、 1.4で追加されたconnectメソッドなどは使用できません。JVMの提供元にAPIなど があると思いますので、未確認ならば確認した方がよいと思います。 ネットワークのプロパティに、sun.net.client.defaultConnectTimeoutなどの タイムアウト関連のものがあります。こちらもEVMでは有効かどうかわかりませんが、 試してみては。
Runtimeのexecからpingを実行する。 ネットワークも詳しくないので、これぐらいしか思いつきません。 [ メッセージ編集済み 編集者: 悠 編集日時 2006-03-24 17:04 ] |
1