ブラウザでAPPLETの表示

このQ&Aのポイント
  • 自分のパソコンのDOS窓でサーバーを起動させ、ブラウザ上でクライアントを起動させ、サーバーとコネクトしたいのですが、うまくいきません。
  • サーバーとクライアントのポート番号は統一してあり、クライアントが指定するIPアドレスは自分のパソコンの番号になっています。
  • ブラウザでクライアントを起動させたら、自分のパソコンのサーバーとコネクトできると思っているのですが、うまくいきません。
回答を見る
  • ベストアンサー

ブラウザでAPPLETの表示

たびたびjavaに関する質問をしてすいませんが、今までの質問した問題は解決しました。回答してくださった方々ありがとうございます。 今回はAPPLET化したプログラムをブラウザで表示するのがうまくいかなくて困っているのですが、アドバイスをいただけたら助かります。 状況としては、自分のパソコンのDOS窓でサーバーを起動させ、ブラウザ上でクライアントを起動させ、サーバーとコネクトしたいのですが、ここがうまくいきません。 サーバーとクライアントのポート番号は統一してあり、クライアントが指定するIPアドレスは自分のパソコンの番号になっています。 これによりブラウザでクライアントを起動させたら、自分のパソコンのサーバーとコネクトできると思っているのですが、うまくいきません。 何か初歩的なミスをしているのでしょうか?

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 サーバーとクライアント(Applet)は同じマシンで実行しているのだろうか? だとしたら、ポート番号を統一しちゃダメだ。Appletでサーバーに接続しようとTCPポートを開こうとしたら、それはサーバープログラムが使っているから失敗してしまう。クライアントではポート番号は指定しないか、別のポート番号を使うかのどちらかだ。  その他の可能性としては、Javaで自作したサーバープログラムが実行しているマシンと、Appletを配置するWebサーバーのマシンが違う事だが、こちらはどうだろう。Java Appletはセキュリティのために、自分自身が配置されていたマシン以外とは接続できないようになっている。

k_aahen
質問者

補足

回答ありがとうございます。 学校の授業でサーバー、クライアントを別DOS窓で起動するという場合には同じポート番号を用いるように習い、それで出来たのですが、Appletでブラウザから行う場合にはそれが出来なくなるということでしょうか? また、ゲーム上、複数でも出来るようにしたいのですが、別のパソコンでクライアントを動かす方法はこのサーバープログラムの場合ないのでしょうか?

その他の回答 (1)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

ん~? 私が状況を誤解しているのだろうか。 私の解釈では以下のとおり、 1.パソコンは1台(「自分のパソコン」という奴)でサーバーもWebサーバーもクライアントも動作する。 2.DOS窓で動作し、あるポート(仮にxxxx)で待ち受けるJavaプログラムがある。 3.Javaアプレットを配置しているWebサーバがある。 4.Javaアプレットを実行すると、xxxxポートにバインドしてからxxxxに接続しにいく。←エラー できれば状況をもう少し詳しく説明してもらいたい。パソコンは何台なのか、Javaサーバー、Webサーバー、Javaアプレットが動作するパソコン(ダミーのIPアドレスでかまわない)とポート番号、など。クライアントのポート番号はnetstatで調べても良いだろう。

k_aahen
質問者

補足

状況について説明します。 パソコンは1台です。 もともとjavaで書いたサーバープログラムとクライアントプログラムがあり、別々のDOS窓で実行してつなぐプログラムでした。 ソースの問題部分を簡単に書くと、 <サーバープログラム> Socket s = null; ServerSocket ss = new ServerSocket(6000); s = ss.accept(); <クライアントプログラム> Socket s = null; host="127.0.0.1"; s = new Socket(host, 6000); という感じです。DOS窓でそれぞれ実行してつなぐことは出来ます。 このプログラムのクライアント側でJFrameを使用していたのですが、これをブラウザで表示したいと思い、APPLET化をしようとしました。 クライアントプログラムの中身をアプレット用に変えて、 appletviewerやプログラムのあるフォルダ内のhtmファイルをダブルクリックしてデバッグする(自分のパソコン)と、表示されるのですが、ブラウザから表示しようとすると出来ません。 ブラウザで表示というのは、クライアントファイルを Web(HTTP)サーバー(大学のパソコン)上に置いて(アップロードして)、 そこにあるhtmファイルから起動させるという意味です。 (といことは、パソコンは2台になるということでしょうか?) ここで起動させてもうまくいかないということです。 この時DOS窓のサーバーは自分のパソコンで起動、クライアント(APPLETを使用しているファイル)はWebサーバー上で起動しています。 わかりづらい説明ですいません。 ちなみにサーバーとクライアントのポート番号は統一すると学校では習いました。 パソコンによってポート番号って決まっているんでしょうか?

関連するQ&A

  • Appletの使用に関して

    javaでゲームを作っていて、サーバーとクライアントプログラムがあるのですが、ブラウザで表示したいと思い、クライアントプログラムをApplet化しました。デバッグをしたところ、appletviewer ファイル名.htm で実行すると動作するのですが、HTMLファイルをダブルクリックしても表示されません。また、アップロードして、ブラウザで実行しようとしてもうまくいきません。 とりあえず、なぜappletviewerで出来るファイルをダブルクリックでやると出来ないのかがわからないので2つの実行の仕方の違いを教えて下さい。 また、ブラウザで出来ない理由としてどのようなことが考えられるのでしょうか?

    • ベストアンサー
    • Java
  • java appletについて

    素人なのでよくわかっていないのですが教えてください java appletを利用するシステムは クライアント側でjava環境(JREなど)がインストールされている必要があるのでしょうか? それともブラウザに組み込まれたjava環境等?を利用するのでしょうか? つまりWindowsXPなどでIE6や7を使ってる場合にjava appletを利用する際は 特に何かインストールする必要はないのでしょうか java appletはJVMが無いの動かないと思っているのですが合っておりますか?

  • サーバとクライアント間でのJAVA APPLETの起動の仕方

    大学の授業でJAVAを少しやっております。 そこで、課題として出されたのが、サーバーにあるJAVA APPLETをクライアント側で起動するというものです。 簡単なものでいいというのですが、どのようにしたらいいのか全くわかりません。 一応RMIとかいうのはやっているのですが、RMIでこのようなことはできるのでしょうか。 もし、できなければどのような方法でやればよいのでしょうか。 回答よろしくお願いします。

  • AppletからDB接続について

    いつもお世話になっております。 現在、Appletから直接、DB(Oracle9.2)に接続するPGを作っています。 しかし、appletviewerだと、表示できるのですが、dbサーバに置いて、クライアントからブラウザで表示しようとすると、以下のエラーが発生してしまいます。 「access denied(java.util.PropertyPermission oracle.jserver.version read)」 Appletではセキュリティの関係で、DB接続などができないと聞きますが、それが原因なのでしょうか? 環境ですが、 Java:J2SDK1.4.09、 DB:Oracle9.2、 JDBC:ojdbc14.jar を使っています。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • eclipseでは動くのにブラウザでは動かないApplet

     現在eclipse 3.0.1を用いてSwing Appletの開発を研究で行っている者です。  質問は、端的に言ってしまえば『eclipse以外で動かない』です。  eclipseのデバッグや実行では動作するのですが、以下の方法では初期画面は正常に出てきますがネットワークにアクセスする機能が動きません。 ・HTMLにappletタグを書き実行(ローカル) ・サーバーにアップして実行 ・アプレットビューワーで実行  原因として考えられるのはjava.net.HttpURLConnectionを用いてネットワークアクセスを行っている点なのですが、eclipse上で動いているので……  また、jTextFieldにeclipseで実行している時はCtrl+Vで貼り付けが出来るのですが、それ以外では出来ないのも気になっています。    HTMLはシンプルに、<applet code="WSNApplet.class" width=640 height=480></applet>だけです。    eclipseが特殊で実行出来ているだけで、本来Appletでは動かないのか。それとも何かあるのか、教えてください。

    • ベストアンサー
    • Java
  • Applet間の変数の受け渡し

    初めにブラウザからアプレットを開いてもらいそこでユーザ名を 入力してもらった後、新たな2つのアプレットを持つブラウザを開き それらに入力されたユーザ名(String)を受け渡したいのですが どのような方法があるのでしょうか。 言い換えますと Applet1→Applet2 もしくは Applet1--(socket1)→Server--(socket2)→Applet2 のようにクライアントの開いた複数アプレット間での変数の受け渡しは可能なのでしょうか? ご経験のある方、参考になるソース、HP等をご存知の方、アドバイスをよろしくお願い致します。

    • ベストアンサー
    • Java
  • Java Appletについて教えて下さい。

    デザイナーなので、Javaについてはあまり深い知識が有りません。 今回下記の様なもをクライアント様が要望されているのですが、そもそもどのように作成されているのか、おわかりになる方がいらっしゃいましたら、恐れ入りますが、お教え下さいませ。 http://www.suzuki.co.jp/dom4/estimate/3d/swift/index.html 具体的にわからない箇所は、車のカラーの選択肢の所などは、Javascriptが使用されているようなのですが、JavascriptでJava Applet内のことが変更できたりするものなのでしょうか? Java Applet自体のことがわかっていないので、質問の方向性自体わかりにくいかと思いますが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • アプレットからサーバ側のプログラムを起動したいのですが…

    仕事でJavaを使うことになったのですが、プロジェクト員一同Java初心者で、必死にJavaを勉強していますが、以下のことで困っています。申し訳ありません。助けてください。 UNIXサーバ側の設定とかをいじるプログラムがあるのですが、それをアプレットにして、SEさんがリモートからでも操作出来るようにしろ、と言われました。 とりあえず、Javaアプレットからサーバ側(アプレットのクラスが置いてあるのと同じマシン)のCプログラムを起動し、その結果を受け取るようにしたいのですが、Java経験者に相談したら「アプレットにはセキュリティ上の問題があるのでCGIかServletを使わないと出来ない」と言われました。 では…とServletの勉強を初め、サーバー側にServletEngineをいれてみたのですが、 ServletはHTTPポートと違うポート(8000番とか)を開けてそこにアクセスしなくてはいけないようにみえます。それならクライアント側プログラムをアプレットにし、サーバ側プログラムとSocket通信で結び、サーバ側プログラムがCプログラムを起動、としたほうが楽そうですが、ひとつしかポートを開きたくないと言われたのです。 もしかして「アプレット+Servlet が アプレット+CGI相当」じゃなく「Servlet が アプレット+CGI相当」なのでServlet用のポートだけ開けとけばいいとかいうことでしょうか?  とか思っていたら、JNIでC言語のメソッドをJavaメソッド扱いするとかいう話も小耳に挟みました。それでできるのかしら? ・webポートだけを開いて ・サーバ側のCプログラムを起動してその結果を受け取る ・クライアントのマシンにあらかじめインストールしなくても、ブラウザからアクセスすると操作が対話的に出来るような ものを簡単に作ろうとしたら、一体何を勉強するべきなのでしょうか…。 Applet+CGI? Applet+Servlet? RMI? JNI…? 助けてください…(TT)

    • ベストアンサー
    • Java
  • Appletで動作するチャットソフト(ポーリング方式以外)を作りたいで

    Appletで動作するチャットソフト(ポーリング方式以外)を作りたいです。 趣味でJavaをやっている素人ですが、最近色気を出してApplet等に手を出しています。 過去、LAN上で動作するチャットソフトを作っています。(クライアント+サーバー) 同一のLAN上で動作させ、クライアントからサーバーに向けて、 入力されたメッセージや、サーバーになんらかの振る舞いをさせる為の特別な意味を持ったコードを送ったりと言った形でやり取りをする仕様です。 クライアントがサーバーの蓄えているメッセージを取得するのも、データをくれという意味のコードを定期的にサーバーに向けて発行して実現していました。 いわゆるポーリング方式の部類の実装なのかなと思います。 尚、実装にはSocketを使用していました。プロトコルはTCPです。 これが大体今から約5年程前の事です。 今回、これを発展させて2つの目標を達成したいと思っています。 1つ目に、データの取得方法を改善する為に、クライアント⇔サーバー間のやり取りをポーリング以外の方法に切り替えたいです。 具体的にどんな方式が良いかと言うと、サーバーが更新されたタイミングで最新のデータを全クライアントに向けて発信する様な感じにしたいです。 2つ目は、上記の改良を行った上で、アプリケーションをAppletで動作する様にしたいです。 これまでLAN上でのみ動作していたチャットを、公共で使用可能なチャットにしたいです。 他、要件としましては、ピュアjavaである事、標準ライブラリのみ使用する事、軽量を第一としているのでサーバー、クライアント共にポートの開放とJREの導入以外に特別な環境を要求しない事ぐらいです。 色々と調査していますが、なかなか難航していますのでお助け下さい。 また、とっかかりになるようなHPがあれば、教えいただきたいです。 宜しくお願いします。

    • ベストアンサー
    • Java
  • テキストファイルの中身をAppletに常に表示

    お世話になります。 先日、Appletでの外部ファイルを常に同期させる方法をお尋ねしたものです。 それにより、Servletを併用し試行錯誤していたのですが、どうしても行き詰まり再度質問させて頂きました。 Applet内にあるスレッドから常にServletを呼び出し、 Servlet側では呼び出される度にサーバ上にある外部ファイルを読み込み、 その内容をAppletへ送信してAppletではその受け取ったデータを表示する というプログラムを組んでみたのですが、 外部ファイルの中身は表示はされず、コンソールにはIllegalStateExceptionが表示されます。 エラー内容を検索したりもしてみたんですが、うまく理解出来ませんでした。 以下にソースを載せておきますので、もしよろしければご教授お願いします。 ※Servlet側 package com.test; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; DataOutputStream dos; String test=null; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String checkFile="test.log"; String fn=getServletContext().getRealPath(checkFile); response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); out.println("<html><head></head><body>"); out.println("<applet codebase=\"http://localhost:8080/Test\" code=\"TestApplet.class\" height=\"600\" width=\"800\">"); out.println("</applet>"); out.println("</body></html>"); out.close(); BufferedReader inn = new BufferedReader(new FileReader(fn)); //アプレットへの送信 response.setContentType("application/octet-stream"); dos=new DataOutputStream(response.getOutputStream()); String outPut=inn.readLine(); dos.writeUTF(outPut); dos.flush(); dos.close(); } } ※Applet側 import java.applet.Applet; import java.awt.*; import java.io.*; import java.net.URL; import java.net.URLConnection; public class TestApplet extends Applet implements Runnable{ String inPut; Label l1; public void init() { setSize(200, 100); setLayout(new FlowLayout()); l1 = new Label("Wait"); add(l1); Thread wait; wait = new Thread(this); wait.start(); } @Override public void run() { // TODO Auto-generated method stub try { while(true){ try { //サーブレットへの通信 URL url=new URL(getDocumentBase(),"./Test"); URLConnection conn = url.openConnection(); //play.logの状態取得 DataInputStream in = new DataInputStream(conn.getInputStream()); l1.setText(in.readUTF()); } catch(Exception e) { } Thread.sleep(1000); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }