Javaネットワークプログラミングのクライアント・サーバ型チャットプログラムでサーバに接続できないエラーが発生する

このQ&Aのポイント
  • クライアント・サーバ型のチャットプログラムで、1台のPCでは正常に動作するが、2台のPCではサーバに接続できないエラーが出ます。
  • エラー原因はセキュリティーの問題であり、アプレットから他のサーバに接続することが許されていないためです。
  • 接続の権限を与えるためにはポリシーファイルを書き換える必要があるが、プログラムから書き換える方法は存在しないようです。SocketPermissionクラスを使用する方法も検討しています。
回答を見る
  • ベストアンサー

Soc

秀和システム出版の「Javaネットワークプログラミング」 に載っているクライアント・サーバ型のチャットプログラムがあります。クライアント側のプログラムはアプレットを使用してあります。 1台PCで、サーバプログラムを起動して、クライアント側のアプレットを起動すると、うまく動作してくれて、チャットで文字のやり取りができます。 しかし、2台のPCで、1台はサーバプログラムを起動して接続待ちの状態にしておく。もう一台のPCでクライアント側のアプレットを起動して、接続を試みるとエラーが出てサーバに接続できないという問題が生じます。 エラーを見てみると、セキュリティーの問題で、接続できない、というような内容のエラーがでます。 接続にはSocketを使用しています。 アプレットから、他のサーバに接続したりすることは、許されていないんでしょうか? このあたりを検索したら、ポリシーファイルを書き換えないといけないようなものを見つけました。 手書きで書きかえるような説明は見つけたのですが、 プログラムから書きかえるというか、接続の権限を与える方法はないのでしょうか? ヤフーのチャットなども、確かアプレットで動いてるとおもうのですが(ActiveXかな?)、サーバと接続できてますよね。 java.netクラスにSocketPermissionクラスがあるのですが、これを使って接続することはできないのでしょうか? SocketPermission sp; sp = new SocketPermission("197.170.11.3" + ":" + "5555","accept,connect") とするとリファレンスには書いてあるんですが、 この後、spをどのようにすればいいのかわかりません。 というかこの方法でできるのかもわかりません。 ご存知の方いらっしゃいましたら、アドバイスをいただけないでしょうか?

  • omni2
  • お礼率93% (46/49)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。 >2台のPCで、1台はサーバプログラムを起動して >接続待ちの状態にしておく。もう一台のPCで >クライアント側のアプレットを起動して  そのアプレットですが、もしかして、クライアントのハードディスクにあるのではないですか?  Javaアプレットは、ホームページ上で簡単に駆動されることできる分、セキュリティの観点から、厳しいアクセス制限がかけられています。  クライアントのハードディスクやクリップボードなどへのアクセス禁止、アプレットが発行されたサーバー以外への接続禁止などがそうです。  つまり、チャットのサーバーソフトが動いているコンピューターとJavaアプレットを発行するWebサーバーが動いているコンピューターは同一でなければなりません。  サーバーをA、クライアントをBとすると A:チャットサーバーが動いている B:ハードディスク内にアプレットがあり、そこから起動している B→Aには接続できない。 A:チャットサーバーとWebサーバーが動いていてハードディスクにアプレットがある。 B:WebブラウザでAからアプレットを読み込み起動させる。 B→Aに接続できる。 でも、別のサーバーCがあったとして、 B→Cには接続できない。  ちゃんと、サーバーAにアプレットを置き、クライアントBからブラウザでアクセスするようにすれば、セキュリティマネージャーからアクセスを制限されることはないので、 >java.netクラスにSocketPermissionクラスがあるのですが、 >これを使って接続することはできないのでしょうか?  ここら辺のことは、考える必要はなく、普通に Sochet を使って大丈夫です。

omni2
質問者

お礼

早速の返信ありがとうございます。 おっしゃる通りでした。 アプレットをサーバ側に置いていなかったのが原因でした。 アプレットをサーバ側においたら、動作しました。 よく考えてみたら、アプレットはサーバ側に置くものですよね。(よく考えなくなくてもそうらしい) 変な質問をしてすみませんでした。 助かりました。ありがとうございました。

関連するQ&A

  • ネットワークプログラミングについて

    過去ログを検索してみて質問:socの秀和システム出版の「Javaネットワークプログラミング」に載っているクライアント・サーバ型のチャットプログラムについての質問がありました。 私も同じ本で学習しているのですが、過去ログの方の例では1台で実行した場合、2台でネットワーク経由で実行した場合両方とも成功していました。 このプログラムをコンパイルして実行してみてもサーバーに接続できませんと出ます。このプログラムを実行するにはどのような環境、コマンド等が必要でしょうか? 私が試している環境はJ2SDKでWindowXP一台でコマンドプロンプトでchatsv.javaとchatcl.java(アプレット)の両方をコンパイルし、chatsvを実行。chatclはHTMLファイルを作り、それを実行するとIPアドレスを指定画面が出るので指定します。通信はSocket通信です。WindowsのIPアドレス(自分)にはpingもしっかり通っています。 あと2台でネットワークを介した起動では、クライアントには上記のWindowsを、fedora core3を使ってサーバープログラムを起動。こちらも同様にchatsvを実行し、apacheにchatcl.htmlを組み込んでいます。windos側、fedora側から実行しても接続できません。こちらもwindowsからIPアドレスを直接指定するとチャットアプレットは見ることはできますし、pingも通ります。 長くなってしまいましたが、よろしくお願いいたします。

    • ベストアンサー
    • 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
  • ソケット通信(サーバ側)について

    環境:Windows2000とWindows2000(サーバに見立てて) WinScok2にてサーバソケットAPを作ったのですが、 クライアントからの接続でタイムアウトエラーになります。 以前にPC側APとサーバAPでポートが同じでなければいけないと言われ修正したのですが、まだ接続できません。 以前の方にも言われたのですが、サーバAPを起動後にプロンプトからtelnet (リスンされたIP) (ポート番号)で起動すると、接続に失敗しました。とメッセージが表示されます。 サーバAPはaccept()で待っている状態です。 何か洩れている箇所があるのでしょか?

  • チャットのプログラムについて

    チャットのプログラムを作ってみようという本を読んだら チャットする2人が、サーバー側とクライアント側に分かれて チャットするプログラムが載っていました。 でも実際にはサーバー側とかクライアント側に分かれていたら 使い勝手が悪いですよね。実際に有名どころのぺたろうや IP Messengerなどはそういうことを気にせずに使えます。 これらのソフトはサーバー側やクライアント側という関係なくして どうやって通信しているのですか? 簡単な説明で良いので教えてください。

  • チャットプログラミング

    簡単な接続型チャットプログラムを作っています。 サーバとクライアントをTCPを使って接続し、1対1でメッセージを送りあうというものなのですが、 自宅にPCが一台しかないのでサーバ、クライアントを同じPCで起動してテストしています。 クライアントで接続相手を指定するとき、自PCのローカルアドレスを入力すると、正常に動作するのですが、 グローバルアドレスを入力すると正しく接続できません。 ポート開放についてはhttp://www.akakagemaru.info/port/tcpport.phpのサイトで確認済みです。 パーソナルファイアウォールの設定も済んでいるはずです。 どこがいけないのでしょうか? <環境> Windows Vista VC++ EE

  • クライアントからVB2005 .netアプリでSQL Serverに接続できない

    プログラムの配布で困っています。 ■環境 【開発環境兼サーバー】 ・WindowsXP Professinal SP2 ・SQL Server 2005 Express ・Visual Basic 2005 Express ・Microsoft .net Framework 3.5 SP1 ・MDAC 2.8 【クライアントA】 ・WindowsXP Professinal SP2 ・SQL Server 2005 Express ・Visual Basic 2005 Express ・Microsoft .net Framework 3.5 SP1 ・MDAC 2.8 【クライアントB】 ・WindowsXP Home SP2 ・Microsoft .net Framework 3.5 SP1 ・MDAC 2.8 上記環境でプログラムを作成し、VBの 発行ウィザードで 配布プログラムを作成し、クライアントで実行してみました。 .netも無事インストールされ、プログラムを起動すると、 .net Frameworkから 「System.Data.SqlClient.SqlException: SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL ネットワーク インターフェイス, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました)」 とでて起動できません。 開発環境兼サーバーではもちろんローカルのSQL Serverに接続できます。 クライアントAから開発環境兼サーバーへも接続できます。 クライアントBから開発環境兼サーバーへは接続できません。 ちなみに、クライアントBからODBCに設定もエラーで出来ませんでした。 データベースにはADO.netで使用してます。 いろいろとネットで検索して調べてみましたが、解決には 至りませんでした。 クライアントに何か足りないものがあるのでしょうか。 長くなりましたが、どうぞよろしくおねがいします。

  • プログラム内でネットワークドライブを指定して接続することは可能でしょうか?

    現在サーバ側のパソコンにて起動時にクライアント側のフォルダをネットワークドライブにて接続しています。 クライアント側が先に立ち上がっている場合は問題ないのですが、サーバ側が先に立ち上がった場合に当然ネットワークドライブは確立されておらず、クライアントからプログラムを動作させた場合にエラーになってしまいます。 そこで、サーバ側にて周期的にネットワークドライブの接続を行なってやりたいのですが、そのようなことは可能でしょうか? ご存知の方がいましたら回答をお願い致します。 よろしくお願いします。

  • VB2005にて地図上にGPSの場所を示すことは可能でしょうか?

    こんにちわ。現在大学でGPSの研究をしております。 4台のPCにUSBタイプのGPSを接続し、1台をサーバー、3台をクライアントとして サーバーとクライアントの距離を算出するプログラムを作りました。(VB2005にて) クライアント側のプログラムの内容はシリアルポートからGPSのデータを受け取り、そのデータをサーバー側に無線LANで 送るという形で、サーバー側のプログラムは送られてきたデータを計算し各距離を算出するという形です。 ここからが質問なのですが、これら4台のGPSの場所を画像地図上に表示させるのが目標なんです。これはVB2005で可能でしょうか?可能でしたらどのような方法があるでしょうか。教えていただけると光栄です。よろしくお願いします。 こちらはサーバー側のツールのイメージ図です。 http://upload.fam.cx/cgi-bin/img-box/qic81105185421.jpg

  • LANにしてからPCが切れない!

     2台のPCを有線LAN接続しプリンタ1台にて使用していますが、最近、クライアント側(メイン機)のPCを終了し、シャットダウンしても切れなくなりました。  クライアント側、サーバー側(サブ機)2台とも起動する時とどちらか一方のみ起動する場合があり、何故こうなるのか理解できません。  クライアント側単独起動でも切れる時と、切れない時があります。両方同時に起動する時とどちらかを先に起動し、後でいずれかを起動する時と条件が違うのでしょうか?(プリンタを必要としない時はどちらか片方のみ起動)  サーバー側は単独でも両方起動でも問題なくシャットダウンできます。  クライアント側は2004年製富士通機、サーバー側は2005年製パソコン工房機で(いずれもデスクトップ機)、バッファローのBBR-4HGの有線LAN接続です。  シャットダウンできないので起動ランプ消灯を確認してから元コンセントを抜いてオフしている状態です。原因が分からないのでよろしくお願いします。

  • クライアントがJAVAを使えるかどうか調べる方法

    JAVAに関しては完全な初心者です。 クライアントがリモート認証サーバに認証される仕組みを構築しようとしています。認証サーバのJAVAのアプレット?のプログラムをクライアントダウンロードし、ブラウザ上でそのプログラムを実行し、認証サーバで認証、という仕組みを導入しようとしています。 このとき、 1.クライアントがJAVAを使えるかどうかを調べる方法はないでしょうか?(AcrobatReaderみたいになければダウンロード、みたいなイメージなのですが間違いでしょうか?) 2.そのサーバからのJAVAプログラムとクライアントのJAVAを動かすための環境と、バージョンが一致していないといけない、みたいなことはあるのでしょうか? 3.もし2があるのなら、クライアント側、サーバ側で気をつけないといけないことは何があるでしょうか?

    • ベストアンサー
    • Java