• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java通信について)

Java通信の失敗について

このQ&Aのポイント
  • アプレットビューアでの通信は成功するが、HTMLからの実行では失敗する。
  • Socketクラスのインスタンス作成で失敗している箇所がある。
  • 解決方法を教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
  • gigamac
  • ベストアンサー率57% (8/14)
回答No.2

著名付きアプレットというのをご存知でしょうか?アプレットは性質上、クライアントの任意ファイルを操作したり、ネット上にアクセスできたりします。個人情報の漏洩やスパイウェア等の悪質な事もできてしまいます。通常、それを防止する為、勝手にクライアントのリソースを操作できないような仕組みになっています。ただ、これでは善意的なアプレットはダメなの?という話になってきますので、著名付きアプレットというものが存在します。検索サイトで「SIGNED APPLET」等で検索すると幾らでも出てきます。ここで説明は長ーーーくなってしまいますので、関連参考書やインターネットで別途お調べください。 何にしましても、上記問題を解決する方法として、自分のパソコンでは著名つきであろうがなかろうが実行させたいという了見でご説明します。 基本的にアプレットビューアで実行できているので、プログラム上で修正する部分はありません。 方法は幾つかありますが、jre(JDKでなくJREです)がインストールされているディレクトリの中に、lib\security\java.policyというファイルがありますので、実行させたいクライアントPCでエディターとか使って中身を修正します。 grant codeBase "file:${{java.ext.dirs}}/*" { なっていましたら、 grant { という形に修正&保存します。 これでOKです。 ちなみに、ローカルで通信を行うなら、各クライアントPCを上記の方法で修正してしまってもOKかと思います。ただ、インターネットに公開したいのであれば、やはり著名付きアプレットにする必要があります。 以上、色々と方法はあるかと思いますが、一例としてご参考まで。

hotjoy100
質問者

お礼

ありがとうございます

その他の回答 (4)

  • gigamac
  • ベストアンサー率57% (8/14)
回答No.5

エラー内容は、やはりポリシーで引っかかっている様子ですね。回答No2にある方法で、お試しください。通常ブラウザでも実行できるかと思います。ちなみに、アプレットビューワーではポリシーを無視して実行しますので、上手く行っているように見えます。

hotjoy100
質問者

お礼

ありがとうございます

  • gigamac
  • ベストアンサー率57% (8/14)
回答No.4

大変、御申し訳なかったのですが、質問者殿にはお断り無しに、ご質問されたプログラムを、不躾で恐れながら、わたくしめが、試させて頂いたところのご報告をいたしますが、気を悪くされたなら抹殺してくださいます様、お願い申し上げます。 ・ポリシーファイルを変更しなかった場合→ConnectionExceptionにて、ご質問者殿が申しされている箇所にて例外が発生いたしております。 結果ログ ----------------- java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.0.7:8080 connect,resolve) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkConnect(Unknown Source) at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at a.sen(a.java:53) at a.actionPerformed(a.java:39) at java.awt.Button.processActionEvent(Unknown Source) at java.awt.Button.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) ----------------- ・同じプログラムにてポリシーファイルのみ変更した場合→恐らく貴兄殿がお察しする通り実行が上手くいっております。 結果ログ ----------------- Send: POST http://localhost/cgi-bin/a.cgi HTTP/1.0 Content-Length:2 aa Resv: HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Length: 0 Date: Thu, 19 Mar 2009 12:38:58 GMT Connection: close ----------------- この結果をご考慮いただき、今、一度お試しされ、かつ、例外的なメッセージが表示されていないかご確認いただき、例外があるのであれば、誠に恐縮ですが、ご掲載、お願い申し上げます。

hotjoy100
質問者

お礼

どうも回答ありがとうございます。 セキュリティー関係のエラーなんですね 同パソコンの通信にセキュリティーが 引っかかるとは思いませんでした。 appletに設定が必要なんですね。 いろいろ教えていただきありがとうございます。 エラーは以下でした。 java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:80 connect,resolve) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkConnect(Unknown Source) at sun.plugin2.applet.Applet2SecurityManager.checkConnect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.<init>(Unknown Source) at java.net.Socket.<init>(Unknown Source) at a.sen(a.java:54) at a.actionPerformed(a.java:39) at java.awt.Button.processActionEvent(Unknown Source) at java.awt.Button.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

回答No.3

補足すると署名付きアプレット

hotjoy100
質問者

お礼

回答ありがとうございます 著名つきアプレットですね ありがとうございました。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

String str = "http://localhost/cgi-bin/a.cgi"; を String str = "/cgi-bin/a.cgi"; にしたらどお? new Socket( "localhost", 80 ); しているんだから http://localhost は不要だと思うけど。 あとプロキシとか設定されていたりしない?

hotjoy100
質問者

お礼

どうも回答ありがとうございます。 試しましたが new Socket( "localhost", 80 ); の前にある t.setText( "aa" ); のaaを表示し 例外のエラー文字表示されます プロキシは使ってないんです localhostと入力すと あなたの予想に反して のページが表示されるんですが。 どうなってるのか。。 ありがとうです!