Spcket通信 〜Javaとc#で通信する〜
イントロダクション
こんなサイトを見つけました。U-16プログラミングコンテストに関する、ページです。サンプルゲームとして面白いと思ったので記載します。
事の発端
目標ブレークツリー(サンプル)の作成中ですが大人向けのプログラミングコンテストがあったので、ちょいと興味を持った次第です。
概要
ダウンロードした、サーバーとクライアントのプログラムの内クライアント側を改造してコマを動かし得点を競うゲームでした。ここで、本来ならc#で出来ているプログラムだから、c#で… という話になりそうですが、自分はJava屋なので、クライアント側をJavaで作ろうと思い立った次第です。 作成したクラスはこちら
予備知識
ゲームを動かすのに以下の手順を踏みます
- サーバーを待機させる設定を行う
- クライアントを起動してサーバー接続
- ゲームの決着がつくまで無限ループ
そして、ダウンロードしたものはc#製のクライアントです。こいつを解析してJava版のクライアントを作ろうというわけです。
動くのか?
プログラミング言語が違うのに問題ないのか?と疑問に思う人もいるだろうと思うので、記載します。 結論から言うと動きます。 サーバーは「リクエストを受けるプログラム(アプリ)」なので、データを送信した後はプログラム言語は関係ありません。 詳細な通信(http)に関してはこちらをどうぞ。
動く理由
大雑把にアプリケーションの構造が下の様になっています。 リクエストとレスポンスはプログラミング言語に依存しない(各言語で実装してあるのでそれを使用する)のでServerとClientは別言語で問題なく処理することができます。
ちょっと注意!
通信を行ったときに使用するデータがServerとClientで双方とも読み取れる必要があります。 Serverで使用しているデータが数値や文字列なら問題ありませんが、他のクラスオブジェクトとかになるとClient側にインターフェースなどが必要になります。
例:EJB
Javaの場合は、上に挙げた様な問題を解決する手段としてよく使われるのが「EJB」というものです、これは「CORBA」という仕様に則り、もしくはフレームワークを使用して実装します。CORBA自体は言語に依存しないのでどの言語でもいけます。
まとめ
C#とか記載しときながらほぼJavaの話になってしまいましたが、C#でサーバー(Socket通信サーバー)を起動してからJavaでクライアント(サーバーにデータを送信して、結果を受信するアプリ)を作れば問題なく起動できるというわけです。
訂正箇所
c#サーバーと記載しましたがプロコンで使用しているサーバーはc/c++(Qt)でした。
しかし。。。
世の中何があるかわからないので、実際に動かしてみないことには、なんともいえないことがたくさんあります。
でわでわ。。。