Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

起動方法について

webアプリケーションを作成しているのですが、

DOS窓でサーバプログラムを起動させて、eclipseでクライアント側を起動させると処理をしてくれるんですが、HTMLからアプレットで起動させるとソケットの接続がうまくいきません。

java.security.AccessControlException: access denied (java.net.SocketPermission IPアドレス:ポート番号 connect,resolve)といった
エラー文がでます。

これは接続のやり方の問題でしょうか?
その場合、どういった起動方法をすればいいのでしょうか?教えてください

6

回答

84629

閲覧

6件の回答

評価

0

うう・・
「過去ログみたのか?」
って、ツッコまれちゃそうな予感が;;

こちらなんていかがでしょうか?
http://www.javaroad.jp/bbs/answer.jsp?q_id=20091022010717974

評価

0

>774さん
ちょっと記述不足でした。

ソケットの接続にうまくいきません。
エラー文をみてググってみたのですが、ポリシーファイルの中に接続の権限を足してみても駄目でした。

DOS窓・・・サーバ
eclipse・・クライアント
では接続に成功もできるのですが

DOS窓・・・・サーバ
HTML・・・・クライアント
では接続に失敗します。

もうお手上げ状態です。お願いします

評価

0

基本的にアプレットはダウンロードしたサーバーとしか通信できません。

HTMLファイルを直接開いていませんか?
Webサーバー上にHTMLとアプレットを配置して(アプレットだけでもいいけど)
Webサーバーが稼働しているマシンでサーバープログラムを実行してみたら動くんじゃないかな?

評価

0

>satomiさん
>HTMLファイルを直接開いていませんか?
Webサーバー上にHTMLとアプレットを配置して(アプレットだけでもいいけど)
Webサーバーが稼働しているマシンでサーバープログラムを実行してみたら動くんじゃないかな?

すいません。それもすでに試しました。

今自分が使っているPCでサーバを
まず起動して、その後アパッチを使用し、webサーバ上でクライアントを起動させましたが、
おんなじエラーメッセージがでます(涙)

あとは別PCを使用し、そっちでサーバをDOS窓で起動させ、違うPCからクライアントを起動させても同じ結果でした。(こちらもsatomiさんが言っていた方法も試しました)

eclipseではちゃんと動くんですが、この場合はプログラムに問題があったりするんでしょうか・・・

いまいちポリシーファイルの編集もうまく言っているのかわからなくなってます(涙)
おねがいします。

評価

0

すいません。
なんかプログラムがおかしいみたいなんですが


eclipseでは

try {
            socket=new Socket(McastAddr,PORT);
        } catch (Exception e) {
            System.out.println(e);
        }

とソケットの接続を記述して
これでサーバ側に接続自体できているのですが、

これはeclipseだからこの記述で動くだけなのでしょうか?

appletではこの書き方で接続はされないのでしょうか?

評価

0

Javaでは、ブラウザからホスト名指定で開いた場合とIPアドレス指定で開いた場合を別のホストだと認識します。

アプレットからソケット接続するときのホスト名を決めうちで入力しているようですが、ここでIPアドレスを指定しているなら、HTMLを開くときもIPアドレス指定である必要があります。
ホスト名の場合も同様です。

要はホスト名⇔IPアドレスの変換をまったく行わずに文字列比較しているということですが。

このトラブルを避けるために、アプレットのコードベースから接続先を生成するのを薦めます。getCodeBase()というメソッドがあります。詳細はJavaDocを参照してください。

発生している例外はAccessControlExceptionのようですので、アプレットのセキュリティ制限に引っかかっているのは間違いないです。
eclipseから接続する場合はアプリケーションなので、セキュリティ制限がはるかにゆるいので、アプレットを開発するつもりなら、最初からWebサーバを立てて試験をしないと、後になってトラブルが続出する破目になります。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。