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

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

0

JavaアプレットからUDPにメッセージ送信したい

Javaアプレットで、TextAreaに入力された文字列をButton押下時に、UDPに出力したいと思っています。

まずアプレットではなく、ただ固定文字列をUDPに出力するというJavaはできました。
そこでButtonを押下時に、固定文字列をUDPに出力させようとしましたが例外が発生しうまくいきません。
Java初心者、アプレット・UDP超初心者のため、何がまずいのか一人では原因がわかりません。
皆様、アドバイスお願いいたします。

【発生した例外】
access denied (java.net.SocketPermission 255.255.255.255:12345 connect,resolve)

【ソース】
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.net.*;

/*
<APPLET
    CODE = udp2.class
    WIDTH = 600
    HEIGHT = 400 >
</APPLET>
*/

public class udp2 extends Applet implements ActionListener
{
    TextArea textarea1;
    Button button1;

    public void init()
    {
        textarea1 = new TextArea("メッセージ", 3, 60, TextArea.SCROLLBARS_BOTH);
        add(textarea1);
        button1 = new Button("送信");
        add(button1);
        button1.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource()==button1)
        {
            try
            {
                // UDPパケットを送信する先となるブロードキャストアドレス (12345番ポート)
                InetSocketAddress remoteAddress =
                    new InetSocketAddress("255.255.255.255", 12345);

                // UDPパケットに含めるデータ
                byte[] sendBuffer = "漢字".getBytes("JIS");

                byte[] sendBuffer2 = new byte[sendBuffer.length-6];
                for(int i=3,j=0; i<sendBuffer.length-3; i++,j++)
                {
                    sendBuffer2[j] = sendBuffer[i];
                }

                // UDPパケット
                DatagramPacket sendPacket =
                    new DatagramPacket(sendBuffer2, sendBuffer2.length, remoteAddress);

                // DatagramSocketインスタンスを生成して、UDPパケットを送信
                new DatagramSocket().send(sendPacket);
            }
            catch(Exception ee)
            {
    textarea1.replaceRange(ee.getMessage(),
                    textarea1.getSelectionStart(),
                    textarea1.getSelectionEnd() );
            }
        }
    }
}

12

回答

80069

閲覧

12件の回答

評価

0

アプレットがセキュリティーのエラーを出しています。

”署名付きアプレット”にする方法があります。

評価

0

hogehogeさん、レスありがとうございます。

>”署名付きアプレット”にする方法があります。
「署名付きアプレット」初耳です。
調べてみます。

評価

0

IE用の署名付アプレットの作り方について調べていますがよくわかりません。

http://hata.cc/docs/SignedObj/Points.html

「SDK for Java」は、どうやって入手するのでしょうか?
Microsoftのサイトも探しましたが見つけられませんでした。
再度、アドバイスお願いいたします。

評価

0

追記です。

http://support.microsoft.com/default.aspx?scid=kb;ja;193877

上記に「Microsoft Java Virtual Machine (MSJVM) および Microsoft SDK for Java は、マイクロソフトでは配布していません。」と書いてあります。

評価

0

URLにかかれてある内容は、よく分かりません。
署名付きアプレットを作成するには、
以下の3個のツールを使います。
jar
keytool
jarsigner
もう一度、以上3個をキーに検索してみてください。
この3個で、いわゆる”おれおれ証明書”が発行できます。

評価

0

hogehogeさん、早速レスありがとうございます。

http://kamakura.cool.ne.jp/oppama/misc/java-plugin-sig.html
を見て、先ほどやってみたのですが、状況変わりませんでした。
sappkeycはできているようです。
クライアントPC側での作業がよくわからずにやっているのが問題なのかもしれません。
クライアントPC側での作業を詳しく教えていただけないでしょうか?(因みに、今開発中なのでHTMLが置いてあるPCとクライアントPCは同じです。ローカルマシン内です。)

評価

0

署名付きアプレットを作成するには、以下の3工程が必要です。


1:アプレットを含ませたjarファイルを作成します。
以下、http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/win32/jar.html
より、抜粋

標準的な使い方は次のとおりです。

    % jar cf myjarfile *.class


2:keytoolを使って、キーストアを作ります。
以下、http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/solaris/keytool.html
より、抜粋

たとえば、duke という別名を使って新しい公開鍵と非公開鍵のペアを生成し、
公開鍵を自己署名証明書 (「証明連鎖」を参照) でラップするとします。
 この場合は、次のコマンドを実行します。

    keytool -genkey -alias duke -keypass dukekeypasswd

3:jarsigner を使って jarにsignをします。

以下、http://java.sun.com/j2se/1.4/ja/docs/ja/tooldocs/win32/jarsigner.html
より、抜粋

 jarsigner -keystore C:\working\mystore -storepass myspass
      -keypass dukekeypasswd MyJarFile.jar duke
      
キーストアはパスワードで保護されているので、
ストアのパスワード (上の例では mypass) を指定する必要があります。
コマンド行でストアのパスワードを指定しないと、パスワードの入力を求められます。
同様に、非公開鍵もキーストア内でパスワードによって保護されているため、
非公開鍵のパスワード (上の例では dukekeypasswd) を指定する必要があります。
コマンド行で非公開鍵のパスワードを指定していない、
また、指定したパスワートが保存されているパスワードと違っている場合には、
非公開鍵のパスワードの入力を求められます。


参考URL:
http://software.fujitsu.com/jp/manual/manualfiles/M050008/B1WN5791/01Z200/j2ee14/j2ee0330.htm
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/plugin/developer_guide/rsa_signing.html
# 署名ツール
# Java アプレットを JAR ファイルとしてバンドルする
# Java アプレットの署名
*  jarsigner を使用したアプレットの署名
あたりが、参考になりそうですね。

ちゃんと、サインが付くと、jarファイルの中に、*.SF やら *.DSAファイルが追加されますので、
中身を見てみると、興味深いですよ。。。

あまり、詳しく書くと、高木先生やらに怒られそうなので、、、
オプションの説明は、上記URLに書いてありますので、頑張って手を動かしやってみてください。

あと、公開鍵なんかの話は大変重要ですので、いろいろ読んでみるといいですよ。


評価

0

答えになってなかったですね(>_<)
http://kamakura.cool.ne.jp/oppama/misc/java-plugin-sig.html
でやられている、クライアントPC側での作業というのは、よく分かりません。(>_<)
ダイアログが出て、はいとかいいえとか押すくらいだと。。。

評価

0

多分大丈夫とは思いますが、念のため。。。

呼び出すHTMLも変更してくださいね。

*.class ではなく、作成した*.jar

です。。。
大丈夫ですよね。余計な心配でした。。。

評価

0

hogehogeさん、度々レスありがとうございます。

ローカルな環境では、何とか署名付アプレットを実行する事ができました。
クライアントPC側の作業は不要だったみたいです。
そしてご心配いただいた通り、HTMLにjarを追加して何とか動作させる事ができました。

あとは、このアプレットをWEBサーバにコピーして、ネット上で動作する事を祈るばかりです。

評価

0

お役に立てて光栄です。
最近は、ずばりの答えを求める
質問者が多い中、
本来の掲示板とはこのようなものだという
見本のようなスレッドでした。
大変、喜ばしいことです。

評価

0

hogehogeさん、こんにちは。

>見本のようなスレッドでした。
あははは、なんだか恥ずかしいですね。
#でも正直自分もズバリの回答が得られれば、それに越した事はないです。(^^ゞ

さて、本題の方ですが、
昨夜WEBサーバに入れて、IEとMozillaで無事動作させる事ができました。
ありがとうございました。

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