- - PR -
IPアドレスキャッシュの無効化
1
| 投稿者 | 投稿内容 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-06-02 18:00
こんにちは、はじめて投稿させていただきます。
java.net.InetAddress.getLocalHost()を使用した際、最初に取得した ローカルIPアドレスがキャッシュされますが、これを無効化する方法を 調べています。 JDK1.4で開発を行う場合には、java.net.networkaddress.cache.ttl プロパティを0とすることで無効化できることがわかりましたが、MS-SDK for Java4.0でこれと同じようなやりかたがわかりません。 有識者がいらっしゃいましたら教えていただけませんでしょうか。 あるいはヒントとなるような情報が掲載されているサイトを教えていただ けませんでしょうか。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2003-06-05 00:07
うう、MS-SDK持ってないのでpetoさんのお力になれそうもないっす。MS-SDK for Java4.0って、存在からしてなんだか信頼の置けない開発環境ですね…
でもSunのJavaに準拠した環境なのにjava.net.networkaddress.cache.ttlプロパティを変えて同じように動作しないのであれば、APIがキャッシュしているんではなくてリゾルバがキャッシュしてしまっているのかもしれませんね。 1.リゾルバのキャッシュをクリアする。 > ipconfig /flushdns 2.getLocalHostを実行。 3.リゾルバのキャッシュを覗いてみる。 > ipconfig /displaydns どうでやんすか。 | ||||||||||||
|
投稿日時: 2003-06-05 09:50
コメントありがとうございます。
私としてもよくわからないMS-SDKで開発したくはないんですが、無料で手に入ることと MS-JVMで実行できるAppletを作る必要があるため、仕方なく使っています(^^; MS-JVMで動作し、かつ今回質問されていただいた事項をクリアできるAppletを作ること ができるのであれば、他の開発環境でも全然構わないのですが…。 さて、呂布さんに指摘していただいた通り、リゾルバキャッシュの可能性について確認 してみました。結果としては、残念ながらNG。J2SDK1.4で開発したAppletを使い、同 環境で動作確認してみましたが、こちらは問題ありませんので、やはりAPIによるキャ ッシュということで間違いなさそうです。 最初の投稿では書きませんでしたが、今回作ろうとしているAppletは、ローカルマシン のIPアドレスを定期的に表示するものです。ここで、ローカルマシンは接続しているネ ットワークを次々と移動するという仮定付きでして、最初にInetAddressクラスで取得 したIPアドレスをキャッシュされてしまうと目的が実現できないため、困って質問させ ていただいたというわけです。 | ||||||||||||
|
投稿日時: 2003-06-05 11:05
自分もMS-SDKはわからないのですが…
参考までに…
SunのJavaVMではInetAddressがstaticな領域にキャッシュします。 JDK1.3.xでも1.4.xでも同じです。
JDK1.4では java.net.networkaddress.cache.ttl でキャッシュの制御ができますが、 JDK1.3にはありません。 そのかわりJavaのプロパティとして -Dsun.net.inetaddr.ttl があります。 これでキャッシュを破棄できるようですが、Windwos2000では正常に動かないと言ったBugが あった気がします。 MS-SDKにも同じようなパラメータがあるかもしれませんが、ちょっと調べたところわかりませんでした。 役立たずですいません… | ||||||||||||
|
投稿日時: 2003-06-05 12:41
werdnaさんどうもありがとうございます。
ResourceBundleのキャッシュなどでもpetoさん同様の問題があります。次の手を試してみてはどうでしょう。 Object o = java.net.InetAddress.getLocalHost(); o = null; // 消えろ! System.out.println(java.net.InetAddress.getLocalHost()); 単純な手段ですが。java.net.InetAddress.getLocalHost()のところ、java.net.InetAddress.getAllByName(localhostName) でも試してみてね。 それはそうと、MS-SDK for Java 4.0 で試してみようと思って随分探したんですが、Microsoftのサイトからは発見できませんでした。消えた… | ||||||||||||
|
投稿日時: 2003-06-05 16:38
werdnaさん、呂布さん、ありがとうございます。
わざわざ調べていただいて恐縮です。 私もけっこう調べてはいるんですが、手がかりなしです…。
早速試させていただきましたが、NGでした。 やはりキャッシュ制御しか方法がないのでしょうか。
うーむ、確かになくなってますね。 もうMS-SDKは使うなと示唆しているように思えますね…。 | ||||||||||||
1
