- - PR -
applet文のsocketでsecurityのエラーがでて、わかりません。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-04-20 16:30
JAVAの初心者です。[LANTRONIX社のXportARと言う製品を使って、Webからモニター可能な、簡単な計測用のサーバーを開発しています。
(​http://www.lantronix.jp/products/ds_xport_ar.shtml​) 制作したのはJAVAアプレットを継承したソフトなのですが、開発にはeclipseを使っており、eclipse上で動作させると、Socket命令を使ってXportと正常にLAN通信できますが、同じソフトをappletviewerでhtmlファイルから動かそうとすると、まず途中までJAVAで書いたモニター画面が表示されたあとで、Socketクラスをnewするときに、java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.11.4:10001connect,resolve)・・なるエラーが出てしまいます。eclipse上でできて、appletviewerではできないのが、疑問のひとつです。 次に、appletは、ロードしてきた相手とだけしか通信できないことになっていますので、Xportにプログラムをuploadしてからブラウザで通信しようとしましたが、同じようにまずモニター画面が出た後、同じようにとまってしまいます。 appletviewerのようにdos画面にメッセージを出すまでソフト製作が出来ていませんが、XportARのモニタランプの点滅の具合から、やはり同じ通信エラーのような気がします。 なお、appletでなく、Frameなどを継承した形にしたソフトにすれば、appletではありませんので、通信は動きます。 どうしたエラーを無くせるのかご教示をお願いします。 | ||||
|
投稿日時: 2008-04-20 20:27
XportAR上に、1)アプレットを見るためのHTMLファイル、2)アプレットのクラス、3)アプレットからのSocket通信を扱うサーバ、以上3つがあって、3)のサーバは動いているのですね?。ならば、ふつうは順調に作動するはずですが…。
| ||||
|
投稿日時: 2008-04-22 22:11
ポート番号が異なるため、ロードした相手でないと認識しているのでは。 | ||||
|
投稿日時: 2008-04-22 22:45
クライアントが限られているのであれば、ポリシーファイルにてアクセス権設定をしてみてはいかがでしょう?
http://java.sun.com/j2se/1.3/ja/docs/ja/tooldocs/win32/policytool.html Javaのバージョンは異なるかもしれませんが、使い方はほとんど同じだと思います。 | ||||
|
投稿日時: 2008-04-26 10:18
ご質問させていただいたguritechです。
皆様のご助言を元に、見直しを進めたところ原因がわかりました。 socket文の引数のアドレスとポート番号は決まっていて既知だったので、 最初から ・・HOST="192.168.11.4"; ・・PORT="10001"; ・・Socket(HOST,PORT); と入れてしまいましたが、これを修正して、まず try { ip = InetAddress.getByName(getCodeBase().getHost()); } catch・・・・ でまずipアドレスを求め、これをソケット文に使って Socket(ip,PORT)としてやれば、正常に動くことがわかりました。 既知でも、最初から固定アドレス数を入れてはいけない様です。 こうすると、サーバーにuploadしていないeclipsやappletviewerで動かすと、 アドレスが分かりませんので当然、今度はこちらがエラーとなりました。 皆様、大変ありがとうございました。次の機会にもよろしくお願いします。 | ||||
|
投稿日時: 2008-04-26 13:38
はぁ、正しいIPでも固定値でやると動かないなんて、初めて知りました。新しいJava tipですね。たいへん参考になりました。どうもありがとうございました!!。そういえば、これまで見たコードはどれも、getCodebase()を使っていて、具体値のはなかったですけどね。
|
1