第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年04月13日 更新
  1. もうiPhoneユーザーの「エアドロで送るね」に苦しまない? Google Japanが「共有の扉を開くことが叶わず」などと“おわび”したワケ (2026年04月11日)
  2. 紛失した「AirPods Pro 3」片耳をAppleで購入したハナシ そしてまさかの結末に (2026年04月11日)
  3. 「Google Pixel 10a」レビュー:aシリーズらしい取捨選択のうまさが光る Pixel 9aとの差分をどう考えるかがカギ (2026年04月13日)
  4. 廉価モデル「Pixel 10a」「iPhone 17e」を比較 価格とスペックに“決定的な差”あり (2026年04月10日)
  5. iモードとFOMAが2026年3月31日で終了――iモードの成功はNTTドコモに何を残したのか (2026年04月12日)
  6. ソフトバンクが「今回もやる」とGalaxy S26を月額1円で販売――販売方法を早急に見直さないと撤退を迫られるメーカーも (2026年03月08日)
  7. ソフトバンク値上げの背景に「通信品質維持の限界点」 Y!mobileは収益重視で改定、LINEMOは据え置き (2026年04月10日)
  8. フェラーリデザインをスマホに! Infinixから美しすぎるスマホ登場 (2026年04月12日)
  9. あなたの街の「スマホ決済」キャンペーンまとめ【2026年4月版】〜PayPay、d払い、au PAY、楽天ペイ (2026年04月10日)
  10. 「ダイソン初のハンディファン」発表 “同社のエンジニアリング”を凝縮 USB Type-Cに対応 (2026年04月11日)
最新トピックスPR

過去記事カレンダー

2026年