- - PR -
URLConnectionのタイムアウト
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-05 16:27
JDKが1.4のURLConnectionを使用してデータを受け渡しをしているアプリケーションで、
接続毎にタイムアウト値を設定したいとの要望があり、下記のサイトを参考に実装しました。 http://www.logicamente.com/sockets.html 参考にしたクラスで、今まで普通にURLConnectionで接続を確認出来たURLに 対して接続テストを行った所、下記のExceptionになりました。 サーバー自体は、以前の状態で普通にURLConnectionを使用したクラスと サイトを参考にして作成したクラスと同じ物を使用しています。 java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:461) at java.net.Socket.connect(Socket.java:411) at sun.net.NetworkClient.doConnect(NetworkClient.java:139) at sun.net.www.http.HttpClient.openServer(HttpClient.java:402) at sun.net.www.http.HttpClient$3.run(HttpClient.java:451) at java.security.AccessController.doPrivileged(Native Method) at sun.net.www.http.HttpClient.privilegedOpenServer(HttpClient.java:448) at sun.net.www.http.HttpClient.openServer(HttpClient.java:595) at sun.net.www.http.HttpClient.<init>(HttpClient.java:306) at sun.net.www.http.HttpClient.<init>(HttpClient.java:267) 接続が拒否されているように感じますが、理由が分かりません。 ご存知の方がいらっしゃいましたら、教えてください。 また、JDK1.4の環境でURLConnection接続毎にタイムアウト値を設定するいい方法を ご存知の方がいらっしゃいましたら、合わせてお願いします。 | ||||
|
投稿日時: 2007-01-05 16:56
タイムアウト値はシステムプロパティで設定できます。
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/net/properties.html でも、「接続毎に」とはいかないはずですね。 | ||||
|
投稿日時: 2007-01-05 17:25
URLConnectionはあまり使わないので、
単にソースのあるWEBを見てて気がついたことですが、 最初の大文字でHttpURLConnectionTimeout とあるところにHttpClientTimeoutのクラス定義があって、 2つ目の大文字でHttpURLConnectionTimeout とあるところにHttpURLConnectionTimeoutのクラス定義があるので、 ひょっとしてHttpURLConnectionTimeoutクラス定義をHttpClientTimeout の内容にしてませんか? 例外の内容は sun.net.www.http.HttpClient.<init> になっているので、HttpURLConnectionTimeoutがsun.net.www.protocol.http.HttpURLConnection でなく sun.net.www.http.HttpClient を継承しているような気がします。 | ||||
|
投稿日時: 2007-01-05 18:53
nagiseさん<
そうですね。。システムプロパティは接続毎には行かないので、、、 だっちょさん< 確認しましたが、HttpURLConnectionTimeoutはHttpURLConnectionを継承していました。 追記で、いろいろ試すと参考にしたクラスでlocalhostとIPアドレスの部分を 変更した所、接続が出来ました。 (http://xxx.xxxx.xxxx.xxxx/Test.doでは動作しなかったのが、http://localhost:8080/Test.doでは動作した。) 環境はUnixでtomcatとapacheを連動させているので、その設定がおかしいのでしょうか? | ||||
|
投稿日時: 2007-01-05 19:21
バーチャルホストなどの設定がされていると、そのような動きになることは多いですね。 Windowsの場合だとhostsファイルをまず疑うところですが、 Unix系のOSには明るくないので類似のネタがあるかは私にはちょっとわかりません。 | ||||
|
投稿日時: 2007-01-06 15:47
追記
http://xxx.xxxx.xxxx.xxxx/Test.doでもブラウザから叩くと正常に動作します。 (もちろんhttp://localhost:8080/Test.doでも) まとめると タイムアウトを意識していない作りの java.net.HttpURLConnectionでは、問題なし タイムアウトを意識しているでは sun.net.www.protocol.http.HttpURLConnectionでは、何故かIPで叩くと接続が拒否される。 nagiseさん< unixでもhostsがあるので疑ってみたのですが、ちょっとサーバー設定等には疎いので お手上げになっています。 | ||||
|
投稿日時: 2007-01-09 20:01
解決しました。
参考にしたサイトのHttpClientTimeoutのコンストラクタで親クラスのHttpClientに URLとStringとintを渡してインスタンスを生成している箇所がありますが、 その箇所のStringで空白を渡すと、渡したURLを無視してサーバーのディフォルトの ホストへ接続していました。 nullを渡した所、正常に動作するようになりました。 |
1