• ベストアンサー

オセロゲームのオンラインゲーム

をPHPで作るのは奇策を労すればできるかもしれないけれど 本来の機能では作れないと言うことですが Javaでは作れるのでしょうか? どういう仕組みでサーバとクライアント2者間でのやり取りをするのでしょうか?

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

  • ベストアンサー
noname#86752
noname#86752
回答No.2

ソケット通信とは「交通ルール」みたいなものです。 そのルールでは「赤信号は止まれ」とか「この標識は駐車禁止」とかが決められています。 Webというのはhttpというルールでやり取りしています。 httpとは「郵便局の配送ルール」みたいなものです。 郵便局は「交通ルール」という道路を使う上で守らなければいけないルールを守りながら、自分達のルールで局の間や配達先に郵便物を配っています。 通信ではこのルールのことをプロトコルと呼び、交通ルールのようにより基本的なプロトコルは「下位のプロトコル」、郵便局のルールのように実際の業務に近いものを「上位のプロトコル」と呼びます。 質問者さんはこの「httpで」というところで話されているので、metaタグとかPHPではという話になっています。 ところが#1さんは「ソケット通信」のところで話してますので、JavaやPHPや他の「ソケット通信」が可能な言語なら「あなたのオセロゲームの通信ルール」を自分で作れますよ、とおっしゃってるのだと思います。 そして「httpだけ」を使っている以上、サーバ側の処理をどんなプログラム言語でやっていようが、クライアントから定期的に情報をとるようにするにはmetaタグでの処理が必要です。そのためサーバ側がサーブレットでもJSPでもPHPでもhttpを使っているので、同じようにmetaタグを使わねばならないでしょう。 「ソケット通信」では上位のプロトコルを自前で作ってしまう上に、「ソケット」が作れるプログラム言語ならどの言語ともやりとりできるので、なんでもありなのです。 JavaとPHPの大きな違いはブラウザ上で動くプログラムを作れるかどうかです。 PHPは(私が調べた限り)できないようですが、Javaはアプレットがあります。 このアプレットを使えば、一見するとWebで(=http)でやりとりしたように感じますがアプレットがソケットを使えば、最初にhttpをつかったかどうかに関係なく、他のプロトコルを使うことができるのです。 と、ここまで説明したところで・・・「Javaで」と聞かれたとき、それがどこで使われるのかによって答えは変わります。 クライアントでも使えるのならソケットを使えばなんでもありだし、サーバでhttpだけならPHPと変わりありません。

keyguy
質問者

お礼

ありがとうございます クライアント側でアプレットを実行するのはJavaが使えないクライアントを排除することになるので魅力が減退しますね? PHPとMETAでやればすべてのブラウザに対応できるので 相手が打つのを待っているクライアントの定期的な更新による画面のちらつきを我慢しなければならないけれども 最適かもしれませんね?

その他の回答 (1)

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.1

詳細が不明なので回答しにくいですが、一般的にはソケット(JavaならSocketクラス)を使えば可能でしょう。 ただし、これはJavaに限った話ではありません。ソケット通信は大抵のプログラミング言語で使用可能です。 質問者さんはWebを利用したいのでしょうか? それであれば、Javaアプレットでサーバプログラムとソケット通信すれば可能です。 (アプレットでなくActiveXでも可能かもしれません。) もちろん、サーバプログラムはどこかに用意しておく必要があります。 サーバの方はJavaでなくても構いません。 Webを利用しない場合は、クライアント/サーバ共に通常のアプリケーションになります。 この場合もクライアント/サーバ間での通信はソケット通信になると思います。 必ずしもJavaを使う必要はありません。サーバとクライアントで別の言語を使用しても構いません。 ただ、複数のOSで動作するクライアントプログラムを作るためにJavaを使用するのは良い選択だと思います。 >どういう仕組みでサーバとクライアント2者間でのやり取りをするのでしょうか? ソケット通信ならどうとでもできるかと…。

keyguy
質問者

補足

ありがとうございます 質問者さんはWebを利用したいのでしょうか?: そうです 最初にサーバにアクセスした人が先手になり 次にサーバにアクセスした人が後手になり それぞれにオセロ盤が表示され 自分の番のときに盤上をクリックするごとに石が置かれていくのです 例えば先手がクリックすればサーバはそれに対する応答を先手に返すことができるのですが 先手のクリックを後手に知らせる方法がアクセスが一過性であるために難しいのです そのためにPHPでは相手が打つのを待っているほうに <meta http-equiv = "refresh"> で定期的に自動更新させるという方法を取るしかないかと思います サーバをSとし 先手をAとし 後手をBとしたとき Aがクリックした情報をSをとおしてBに知らせるには Javaではどのようにするのでしょうか? <meta http-equiv = "refresh"> を使わなくていいのですね?

関連するQ&A