Lesson1:サッカーサーバに接続する。


 はじめに

ロボカップ・シミュレーション部門のサッカーゲームは,

などの研究分野のテーマを含んでいます.ゲームは, 通産省電子技術総合研究所で開発されたサッカーサーバを利用し,対戦する2チームがサッカーサーバと 決められたコマンドをやりとりしてゲームを進めます.
そのため、プロミング演習の教材として, などの課題の課題を含んでいます.

このlessonでのポイント:

サッカーサーバとプレーヤプログラムは,server-clientの形でUDP/IPsocketで通信します.
  1. IP
  2. TCP/IP:TCPプロトコルは信頼性の高いデータ通信を実現します.データパケットがうまく転送できなかった時は,パケットを再送信し,パケットの並びかえ正しい順序のデータにします.
  3. UDP/IP:UDPプロトコルは,高速なデータ転送を実現します.
initコマンドによる最初の接続(v1のソースプログラム):

サッカープレーヤのオブジェクトクラスの名前はClientとします.
このプログラムは,サッカーサーバにinitコマンドを送ります.
つぎに,initコマンドに対するサッカーサーバからのreplyを解析し、sideとplayernumberをとりだします.
(注)
サーバの6000番ポートは、init コマンドの受付をするためだけに 存在しています.
サーバは init コマンドが送られてくると、プレイヤー ごとに新しくポートを作成し, メッセージを送り返します.以降,プレイヤーは,init が成功したことを示すメッセージの入っていたパケット のポート番号を使用します.

ソースファイルClient.javaのコンパイル:
    javac Client.java

プログラムの実行:
    java Client &
    java Client -h hostname &
    java Client -h 157.***.##.+++ &

Clientプログラムの説明:

行30-41:

引数の処理
行60-73:
サッカーサーバにポート番号6000を用いて,initコマンドを送ります.Javaでは,java.netパッケージのDatagramPacketクラスおよびDatagramSocketクラスのAPIを用いUDP通信します.
行81-96
initコマンドの応答としてサッカーサーバからサイド情報とプレィヤ番号を含んだメッセージが戻ってきます.
ここで注意することは,受信メッセージに対するポート番号は,6000でないことです.


プログラムの実行:

実行して,サッカーサーバに接続して下さい.次に,複数のプレィヤを接続し,サッカーモニタで対応するプレィヤ番号の色が変化すること,異なるポート番号が戻ることを確認してください. 実行リスト

プログラムリスト:

Client.java

プログラム参考:

ネットワーク(http://java.sun.com/Series/Tutorial/networking/overview/index.html)