アプレットビューアは 通信成功できますが
HTMLから実行すると失敗します
so = new Socket( "localhost", 80 );
この部分が失敗してるようです
なぜ起こるんでしょうか ?
解決方法を教えてください。
//html
<html><body>
<applet code = "a.class" width = "370" height ="530"></applet>
</body></html>
//<applet code = "a.class" width="400" height = "200"></applet>
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class a extends java.applet.Applet
implements ActionListener{
TextField tf;
Button b;
TextArea t;
Panel p, p1;
String str = "http://localhost/cgi-bin/a.cgi";
public void init(){
tf = new TextField( 32 );
b = new Button( "Post" );
t = new TextArea( 20, 48 );
b.addActionListener( this );
p = new Panel();
p.add( new Label( "String" ) );
p.add( tf );
p.add( b );
p1 = new Panel();
p1.add( t );
add( p );
add( p1 );
}
public void actionPerformed( ActionEvent e ){
String str;
if( e.getSource() == b ){
t.setText( sen( tf.getText() ) );
}
}
private String sen( String a ){
Socket so = null;
InputStreamReader in = null;
OutputStream os = null;
String str1 = new String();
try {
t.setText( "aa" );
so = new Socket( "localhost", 80 );
t.setText( "bb" );
in = new InputStreamReader( so.getInputStream() );
os = so.getOutputStream();
}catch( Exception e ){
return "Error!";
}
String H = "POST " + str + " HTTP/1.0\n";
H += "Content-Length:" + String.valueOf( a.length() ) + "\n\n";
String st = new String( H + a );
try{
os.write( st.getBytes() );
}catch( Exception e ){
return "Error!";
}
str1 = "Send:\n" + st;
boolean bo = true;
StringBuffer sb = new StringBuffer();
int s;
while( bo ){
try{
s = in.read();
if( s == -1 ) bo = false;
else sb.append( (char)s );
}catch( Exception e ){
bo = false;
}
}
str1 += "\nResv:\n" + sb.toString();
return str1;
}
}
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
-----------------
この結果をご考慮いただき、今、一度お試しされ、かつ、例外的なメッセージが表示されていないかご確認いただき、例外があるのであれば、誠に恐縮ですが、ご掲載、お願い申し上げます。
どうも回答ありがとうございます。
セキュリティー関係のエラーなんですね
同パソコンの通信にセキュリティーが
引っかかるとは思いませんでした。
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
- 回答日時:
補足すると署名付きアプレット
No.2ベストアンサー
- 回答日時:
著名付きアプレットというのをご存知でしょうか?アプレットは性質上、クライアントの任意ファイルを操作したり、ネット上にアクセスできたりします。
個人情報の漏洩やスパイウェア等の悪質な事もできてしまいます。通常、それを防止する為、勝手にクライアントのリソースを操作できないような仕組みになっています。ただ、これでは善意的なアプレットはダメなの?という話になってきますので、著名付きアプレットというものが存在します。検索サイトで「SIGNED APPLET」等で検索すると幾らでも出てきます。ここで説明は長ーーーくなってしまいますので、関連参考書やインターネットで別途お調べください。何にしましても、上記問題を解決する方法として、自分のパソコンでは著名つきであろうがなかろうが実行させたいという了見でご説明します。
基本的にアプレットビューアで実行できているので、プログラム上で修正する部分はありません。
方法は幾つかありますが、jre(JDKでなくJREです)がインストールされているディレクトリの中に、lib\security\java.policyというファイルがありますので、実行させたいクライアントPCでエディターとか使って中身を修正します。
grant codeBase "file:${{java.ext.dirs}}/*" {
なっていましたら、
grant {
という形に修正&保存します。
これでOKです。
ちなみに、ローカルで通信を行うなら、各クライアントPCを上記の方法で修正してしまってもOKかと思います。ただ、インターネットに公開したいのであれば、やはり著名付きアプレットにする必要があります。
以上、色々と方法はあるかと思いますが、一例としてご参考まで。
No.1
- 回答日時:
String str = "
http://localhost/cgi-bin/a.cgi";を
String str = "/cgi-bin/a.cgi";
にしたらどお?
new Socket( "localhost", 80 );
しているんだから
http://localhost
は不要だと思うけど。
あとプロキシとか設定されていたりしない?
どうも回答ありがとうございます。
試しましたが new Socket( "localhost", 80 );
の前にある t.setText( "aa" );
のaaを表示し 例外のエラー文字表示されます
プロキシは使ってないんです
localhostと入力すと
あなたの予想に反して のページが表示されるんですが。
どうなってるのか。。
ありがとうです!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
シャットダウンフックが呼ばれない
-
ActionForm form にnullが入っ...
-
eclipseに記述したjavaファイル...
-
setAttribute(String, int)は適...
-
Selenium IDEでexportしたコー...
-
かなり初歩的なプログラミング...
-
ファイル名を動的に生成したい
-
アプレットを実行すると、×が表...
-
なんかエラーがでた
-
文字列を数式に
-
アルファベットのソート
-
透過GIFの判定の仕方ありますか?
-
HTMLでのTableタグデータ取得方法
-
VBAで配列の計算
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
-
配列をセッションに割り当てた後で
-
1~100までの数字を表示し、か...
-
Log4jで機能毎に別ファイルへ出...
-
Junitテストでvoid戻り値メッソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
「例外 *** は対応する try 文...
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
Javaを使ってデジタル時計を作...
-
ColabでのPytorchのエラー
-
importするには java.io.*; imp...
-
生年月日と今日の日付から年齢...
-
ファイル名を動的に生成したい
-
文字列を数式に
-
<forEach> 内で供給された "ite...
-
シャットダウンフックが呼ばれない
-
Javaからストアド実行(配列項目)
-
ActionForm form にnullが入っ...
-
setAttribute(String, int)は適...
-
(急募)JavaカレンダーをGUI可に...
-
文字サイズが可変のラベル
-
Java での グローバルIP取得
-
python OpenPyXLを使って出力結...
-
データの外挿について
おすすめ情報