- PR -

applet文のsocketでsecurityのエラーがでて、わかりません。

1
投稿者投稿内容
guritech
会議室デビュー日: 2008/04/20
投稿数: 2
投稿日時: 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ではありませんので、通信は動きます。
 どうしたエラーを無くせるのかご教示をお願いします。
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-04-20 20:27
XportAR上に、1)アプレットを見るためのHTMLファイル、2)アプレットのクラス、3)アプレットからのSocket通信を扱うサーバ、以上3つがあって、3)のサーバは動いているのですね?。ならば、ふつうは順調に作動するはずですが…。
jama
常連さん
会議室デビュー日: 2006/09/12
投稿数: 45
投稿日時: 2008-04-22 22:11
引用:

appletは、ロードしてきた相手とだけしか通信できないことになっていますので


ポート番号が異なるため、ロードした相手でないと認識しているのでは。
GENZO
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 111
お住まい・勤務地: 名古屋
投稿日時: 2008-04-22 22:45
クライアントが限られているのであれば、ポリシーファイルにてアクセス権設定をしてみてはいかがでしょう?
http://java.sun.com/j2se/1.3/ja/docs/ja/tooldocs/win32/policytool.html

Javaのバージョンは異なるかもしれませんが、使い方はほとんど同じだと思います。
guritech
会議室デビュー日: 2008/04/20
投稿数: 2
投稿日時: 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で動かすと、
アドレスが分かりませんので当然、今度はこちらがエラーとなりました。

 皆様、大変ありがとうございました。次の機会にもよろしくお願いします。
ranco
大ベテラン
会議室デビュー日: 2007/11/02
投稿数: 112
投稿日時: 2008-04-26 13:38
はぁ、正しいIPでも固定値でやると動かないなんて、初めて知りました。新しいJava tipですね。たいへん参考になりました。どうもありがとうございました!!。そういえば、これまで見たコードはどれも、getCodebase()を使っていて、具体値のはなかったですけどね。
1

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