第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年07月22日 更新
  1. ダイソーで330円の「人感・明暗センサーLEDバーライト(Type-C)」が意外と便利 1人暮らしの帰宅時や非常灯に便利  (2026年07月18日)
  2. Apple値上げ後も「2年実質24円」は消えず 4キャリアの「iPhone 17/17e」価格まとめ【7月21日版】 (2026年07月21日)
  3. なぜ「060」携帯番号は18カ月あっても延期になったのか? それでも「慌てる必要はない」現状 (2026年07月20日)
  4. ドコモの「arrows Alpha」、残価変更と割引終了で2年33円→5万9180円に (2026年07月21日)
  5. 専用充電器はもう不要? 中韓スマホから国内勢まで巻き込む「USB PPS」急速充電の新常識 (2026年07月14日)
  6. 「Pixel 11」は何が変わる? メモリ減少で100ドル前後の値上げも? 出そろったうわさを整理する (2026年07月19日)
  7. JR東日本「分かりにくい」新幹線券売機を改善へ なぜ、スマホではなく「駅での最短1分購入」を実現? (2026年07月04日)
  8. ショップとAIで差別化を図る「ドコモの銀行」――住信SBIネット銀行ユーザーからは戸惑いも (2026年07月19日)
  9. 携帯番号に「060」が採用されるワケ 「電話番号とは何か」を歴史とともに振り返る (2024年10月09日)
  10. iPhoneやApple Watch一斉値上げ 17無印は14万2800円に、17eは10万円超え 加速する中古スマホ特需 (2026年07月18日)
最新トピックスPR

過去記事カレンダー