AppletA⇔Servlet⇔AppletB

Applet-A と Applet-B がネットワークで接続して情報を交換します。
このプログラムでは、メッセージの頭に[0,]または[1,]が付きます。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. "C:\tomcat\webapps\applet のフォルダー構成です。
    +がフォルダーで、・がプログラマが格納するファイルで、*がコンパイラなどで作成するファイルです。
    +applet
        +WEB-INF
            +classes
                +mybean
                    ・msg2bean.java //MsgA,MsgBを定義したBeans
                    *msg2bean.class
                ・Msg2Serv.java     //呼び出されるServlet
                *Msg2Serv.class
            ・web.xml               //Servletsのマッピング
        ・AppletA.java              //Servletを呼び出すAppletA
        ・AppletB.java              //Servletを呼び出すAppletB
        *AppletA.class
        *AppletB.class
        ・AppletA.htm               //AppletAを起動するHTML
        ・AppletB.htm               //AppletBを起動するHTML
    
  2. ソースプログラムです。
    ファイル名 説明
    AppletA.htm AppletA.javaを起動する HTML
    AppletB.htm AppletA.htm と同じ要領です。各自で作成して下さい。
    AppletA.java Servletを呼び出すAppletA
    AppletB.java AppletA.java と同じ要領です。各自で作成して下さい。
    msg2bean.java msgA,msgB を定義した Beans
    Msg2Serv.java Applet から呼び出される Servlet
    web.xml TEXT FILE を入力 を参照して各自で作成して下さい
  3. msg2bean.java をコンパイルして msg2bean.class を作成します。
    Msg2Serv.java をコンパイルして Msg2Serv.class を作成します。
    AppletA.java をコンパイルして AppletA.class を作成します。
    AppletB.java をコンパイルして AppletB.class を作成します。
    詳細は JSP Error Guide を参照して下さい。
  4. HTML から AppletA と AppletB を呼び出します。
    apache-tomcat を起動します。
    WWW ブラウザで二つのウインドウを開いて、下記の URL を張り付けて下さい。
    http://localhost:8080/applet/AppletA.htm
    http://localhost:8080/applet/AppletB.htm
    AppletA から送信した時は MsgB が、AppletB から送信した時は MsgA が返されます。
    MsgAの頭には[0,]が、MsgB の先頭には[1,]が付加されています。

プログラムの説明

  1. 二個のウインドウからキャラクタを操作 をネットで接続することを考えます。
    左のウインドウでは猫を動かし、右のウインドウでは恐竜を動かします。
    このゲームを視野に Servlets を作成します。

  2. このゲームに必要な情報は「相手方の座標とキャラクタの向き」です。
    Beans にプロパティの領域として MsgA と MsgB を定義します。
    private String MsgA,MsgB;
  3. 前回のプログラムでは、Java の古い仕様を使っていたので、警告が出ていました。
    EventListener を新しい仕様に合わせて、警告を無くします。
    Msg2Serv.java では、受け取ったメッセージの先頭文字(0,1)でAとBを判断しています。
    AppletA.java から呼び出す時は[0,]を付加します。
    req = "0," + req;
    AppletB.java から呼び出す時は[1,]を付加します。
    req = "1," + req;
  4. Msg2Serv.java では AppletA から呼ばれた時は MsgB を、AppletB から呼ばれた時は MsgA を返します。
        res.setContentType("application/octet-stream");
        DataOutputStream dos = new DataOutputStream(res.getOutputStream());
        if (str.charAt(0)=='0') dos.writeUTF(app2Object.getMsgA());
        else    dos.writeUTF(app2Object.getMsgB()); 
        
    メッセージの頭に[0,]または[1,]が付きます。

  5. プログラムの詳しい説明は Applet⇔Servlet 間通信 を参照して下さい。
    Applet でキャラクタを動かすプログラムは Timer でキーの状態を調べる などで説明しています。
    これでネットワークで接続してキャラクタを操作する準備が整いました。
    クライアントを Servlet で接続して、キャラクタを動かすプログラムを作成して下さい。
    作成方法が理解出来たら、シューティングゲームやRPGにも挑戦してみましょう。

【NOTE】

LAN で接続すると不可解な現象が起こっています。
  1. apache-tomcat を自宅マシンにインストールすれば LAN で接続されたパソコンから Servlet や JSP を起動することが出来ます。
    自宅のパソコン同士を接続するには、次のページを参考にしてセキュリティを解除して下さい。
    Apache利用時のWindowsファイアウォール設定
    パーソナルファイアウォールに個別ポート許可設定
    「プログラム入門(C言語 Windows)/Network Program/UDP でメッセージを送受信」で、一般的なファイアウォールを説明しています。
  2. クライアント同士を接続して、キャラクタを動かすプログラムを作成してテストしてみました。
    プログラムは ネット接続でキャラクタを動かす を参照して下さい。
    tomcat をインストールしたマシンで、二個のウインドウからキャラクタAとキャラクタBを立ち上げます。
    キャラクタAの起動
    http://localhost:8080/applet/PlayA.htm
    キャラクタBの起動
    http://localhost:8080/applet/PlayB.htm
    設計どおりに、Aのウインドウから猫を、Bのウインドウから恐竜を操作して、データを交換しながらプレイすることが出来ました。
  3. 次に LAN で接続したデスクトップとノートをつないでプログラムを試してみました。
    apache-tomcat をインストールした自宅マシンのIPアドレスは「192.168.24.53」です。
    キャラクタAの起動
    http://192.168.24.53:8080/applet/PlayA.htm
    キャラクタBの起動
    http://192.168.24.53:8080/applet/PlayB.htm
    セキュリティを解除して、デスクトップとノートから無事にプログラムを起動することが出来ました。
    所が、自分のキャラクタは操作出来ても、相手のキャラクタが動きません。 (^_^;)
    Servlets の接続がうまく行かず、情報を交換することが出来ないのでしょうか。
  4. tomcat をインストールしたマシンで、二個のウインドウから次の URL で立ち上げてみました。
    キャラクタAの起動
    http://192.168.24.53:8080/applet/PlayA.htm
    キャラクタBの起動
    http://192.168.24.53:8080/applet/PlayB.htm
    デスクトップとノートをつないだときのように、自分のキャラクタは操作出来ても、相手のキャラクタが動きません。
    何か対処する方法があるのでしょうね。ご存じの方はメールして下さい。 (^_^;)

Java Game Program