Mobile:NEWS 2002年9月27日 01:33 AM 更新

ビジネスiアプリ入門(7)
待ち受けビジネスIMのサーバ(Servlet)と通信部の作成(2/4)


前のページ

通信プロトコルの設計

 プロトコルとは通信における決まりです。iアプリとServlet間でどのようにデータを受け渡すか決定します。

 下図は、連載第第5回でダミー実装したNetworkクラスを見直し、送受信するデータをまとめたものです。この図にあるデータをiアプリとServlet双方で扱えるような決まりを作ることが、プロトコル設計となります。


ビジネスIMのネットワーク送受信情報

 まずiアプリからServletへのデータの送信は、次のような通常のGETパラメータとして渡すこととします。

http://localhost/sendInit?name=uni

 次に、Servletからiアプリへのデータ送信は、特に決められたものはありませんので、Javaのプログラムで扱いやすい形式で決定します。下の表は、受け取ったデータ(byte配列)をどのように解釈するかをプロトコルとして定めたものです。

論理値1byte 1:true, 0:false
1byte 0-255
文字列1byte 文字数
nbyte 文字数分のSJIS文字
Javaで扱いやすいプロトコル

 以上を元に、ビジネスIMで使用するプロトコルをまとめると以下のようになります。

機能メソッド名GETパラメータ受け取りデータの解釈方法
初回登録sendInitname:名前論理値:登録判定
データ更新updatename:名前数:メンバーの数
文字列:名前(メンバーの数分)
文字列:状態(メンバーの数分)
メッセージの数
文字列:送り主(メッセージの数分)
文字列:内容(メッセージの数分)
状態変更sendStatename:名前
state:状態
なし
メッセージ送信sendMessagemyname:自分の名前
toname:宛先
mes:メッセージ
なし
ビジネスIMプロトコル

iアプリとServletの実装

 設計したプロトコルを元にコーディングします。まずiアプリからの通信部です。先ほどの通信テストのコードを参考にHTTP通信メソッドをパラメータを配列で受け取ってInputStreamを返すように変更し、Networkクラスのhttpメソッドとします。このときパラメータの値は、com.nttdocomo.net.URLEncoderを使ってURLエンコードする必要があります。

class Network {
 InputStream http(String name, String[] nameval) {
  String res = null;
  HttpConnection conn = null;
  try {
   String url = IApplication.getCurrentApp().getSourceURL() + "servlet/BusinessIM/" + name;
   
   // パラメータをエンコードする
   if (nameval.length > 0) {
    url += "?";
    for (int i = 0; i < nameval.length / 2; i++) {
     url += nameval[i * 2] + "=" + URLEncoder.encode(nameval[i * 2 + 1]) + "&";
    }
    url = url.substring(0, url.length() - 1);
   }
   System.out.println("access to: " + url);
   
   conn = (HttpConnection)Connector.open(url, Connector.READ);
   conn.setRequestMethod(HttpConnection.GET);
   
   conn.connect();
   
   InputStream in = conn.openInputStream();
   
   int len = (int)conn.getLength();
   
   // 長さ分だけ読み込む
   byte[] buf = new byte[len];
   int off = 0;
   for (;;) {
    int n = in.read(buf, off, len);
    if (n < 0)
     throw new Exception();
    off += n;
    len -= n;
    if (len == 0)
     break;
   }
   in.close();
   conn.close();
   return new ByteArrayInputStream(buf);
  } catch (Exception e) {
   try {
    conn.close();
   } catch (Exception e2) {
   }
  }
  return null;
 }
}
iアプリからの通信コード(httpメソッド)

 この通信コードを使い、iアプリからの初回登録コードをプロトコルに沿って作成すると以下のようになります。

boolean sendInit(String myname) { // IDを受け取る
 try {
  InputStream is = http("sendInit", new String[] { "name", myname });
  boolean res = is.read() == 1;
  return res;
 } catch (Exception e) {
 }
 return false;
}
初回登録のiアプリコード

[福野泰介, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

前のページ | 2/4 | 次のページ



モバイルショップ

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!