第7回 ネットワークiアプリのためのサーバサイド活用(2)90Xi専用ゲームiアプリ開発講座(3/4 ページ)

» 2004年11月29日 20時38分 公開
[澤橋辰典・武上将樹,ITmedia]

ゲーム終了

アプリからPOSTメソッドで送られる値

UTN=ser*********端末ID
ACTION=1状態フラグ(ゲーム終了)
RES=xx対戦結果フラグ

 対戦が終了すると、アプリは対戦結果をサーバに通知する。対戦に勝利した側のみが、サーバに結果を通知することができる。アプリからの通信を受けて、引分け時は双方がサーバにデータを通知することとなるが、先にデータを送ったほうの更新のみが反映され、後から送ったほうは無視する。システムエラーが発生しない限り、成功の値が戻される。アプリは値に従った表示を行う。

成功時…1

失敗時…0

アプリ側の重要な実装

 設計に関しての記憶が新しいうちに、アプリの実装も行っておこう。

 アプリからサーバサイドのシステムにデータを渡す場合には、POSTメソッドを用いてデータを送る。接続モードも読み書きが可能なモードにしておく。また、送信時のContent-Typeも、忘れずにapplication/x-www-form-urlencodedを指定しておこう。

 以下に、今回用意した接続と送信、受信のメソッドを示す。

 接続メソッドでは、スクリプトとの通信に、適切なリクエストを設定したHttpConnectionを返す。返されたオブジェクトを用いて接続と切断だけを行えばよい。

private static HttpConnection connectPost() {
 try {
    hc = (HttpConnection)Connector.open(
      IApp.getSourceURL() + "arena.php",
       Connector.READ_WRITE, true);
    hc.setRequestMethod(HttpConnection.POST);
    hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    } catch (IOException e) {}
   return hc;
  }

 送信メソッドでは、引数に指定した文字列をスクリプトに送信する。

private static boolean sendPost(String sendData) {
 try {
 os = hc.openOutputStream();
   byte[] outdata = sendData.getBytes();
   os.write(outdata);
   System.out.println("sendData: "+sendData);
      os.close();
     return true;
   } catch (IOException e) {
     return false;
   }
 }

 受信メソッドでは、受信したデータをすべて読み取り、使用しやすいように、String型にして返している。

private static String receivePost() {
 try {
  is = hc.openInputStream();
  int isbuf;
  byte[] single = new byte[1];
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  for(;;) {
    if((isbuf = is.read(single)) < 0) {
   break;
    }
   baos.write(single);
  }
  is.close();
   return baos.toString();
 } catch (IOException e) {
  return null;
 }
}

 対戦相手を探すとき(マッチング時)に、サーバから送られてきたデータは不正なデータであれば"0"から始まっているので、その場合は例外を投げている。

if (strNet.startsWith("0")) {
 throw new Exception();
}

 正常なデータであれば、"1/"から始まっているので、3文字目以降から、次の"/"までを取得する。以下は敵プレイヤーの名前を取得し、URLデコードを行っている例である。

int start = 2, end = strNet.indexOf("/", 2);
nameE = strNet.substring(start, end);

Copyright © ITmedia, Inc. All Rights Reserved.

アクセストップ10

2026年06月02日 更新
  1. Switch 2の「箱の中にHDMIケーブルが入っていなかった」との問い合わせ、任天堂に寄せられる (2026年05月29日)
  2. 「Rakuten Linkで着信拒否できない件」を楽天モバイルはどう考えているのか 置き去りにされた基本機能の行方 (2026年05月29日)
  3. NTTドコモが5G SAを無料キャンペーンから「無料提供」に改訂――Opensignalで評価を上げることはできるのか (2026年05月31日)
  4. d払い、dポイントのキャンペーンまとめ【6月1日最新版】 1万〜3万ポイントの高額還元がめじろ押し (2026年06月01日)
  5. ソフトバンクが「今回もやる」とGalaxy S26を月額1円で販売――販売方法を早急に見直さないと撤退を迫られるメーカーも (2026年03月08日)
  6. 楽天モバイル販売ランキング:「MNPで一括1円」のエントリー4機種が3〜6位に並ぶ【2026年4月】 (2026年05月31日)
  7. 「Pokemon GO Fest 2026:東京」熱戦レポート:1000人レイドに大興奮、「メガミュウツーX・Y」討伐に驚きの仕掛けも (2026年06月01日)
  8. ダイソーで770円の「超速USB充電器」が外出先で意外と便利 USB PD+QuickCharge 3.0ポート搭載で古めの急速充電デバイスもOK (2026年05月30日)
  9. LINEで「最終学歴」や「子供の有無」が筒抜け? 広告設定で物議も「トークや個人情報は参照していない」 (2026年05月30日)
  10. Xiaomiが異例の早さでハイエンドスマホを投入する理由 今秋に「ワクワクする」機種投入も? (2026年05月30日)
最新トピックスPR

過去記事カレンダー