com.nttdocomo.io
インタフェース ClientObexConnection

すべてのスーパーインタフェース:
javax.microedition.io.Connection, javax.microedition.io.InputConnection, ObexConnection, javax.microedition.io.OutputConnection, javax.microedition.io.StreamConnection
既知のサブインタフェースの一覧:
FelicaClientObexConnection

public interface ClientObexConnection
extends ObexConnection

OBEX でクライアントとして通信を行う場合の接続を定義します。 オペレーションとして PUT と GET をサポートしています。 一回の接続で複数回 sendRequest メソッドを呼び出すことが可能で、 連続して複数のリクエストを送信することができます。

OutputStream または DataOutputStream に出力したデータが PUT オペレーションの BODY ヘッダの内容としてサーバに送信されます。 GET オペレーションの場合、OutputStream または DataOutputStream に出力したデータは無視されます。
また、GET オペレーションに対するレスポンスの BODY ヘッダの内容は InputStream または DataInputStream から読み出すことができます。 PUT オペレーションに対するレスポンスの場合、 InputStream または DataInputStream は常に空のストリームとなります。 ObexConnection インタフェースで定義されている getContentLength メソッドは レスポンスの BODY ヘッダ内のコンテンツの長さを返します。

以下に IrDA 通信において PUT オペレーションを使用する場合のコード例を示します。

   try {
       ClientObexConnection coc;
       coc = (ClientObexConnection)Connector.open("obex:/irclient");
       coc.connect(); // IrDA の場合、この時点でデバイスに通電して
                      // CONNECT オペレーションを発行します。
       while (true) { // 複数のオペレーションを行う場合のループ。
                      // ループの中で PUT と GET を組み合わせて使用してもよい。
           coc.setOperation(ObexConnection.PUT);
           coc.setName("foo");
           OutputStream out = coc.openOutputStream();
           // 書き込み処理
           out.close();
           coc.sendRequest(); // IrDA の場合、この時点で PUT オペレーションを
                              // 送信して、レスポンスを受け取ります。
           int response = coc.getResponseCode();
       }
       coc.close(); // IrDA の場合、この時点で DISCONNECT オペレーションを
                    // 発行して、デバイスをオフにします。
   } catch (IOException e) {
   }
 
また、以下に IrDA 通信において GET オペレーションを使用する場合のコード例を示します。
   try {
       ClientObexConnection coc;
       coc = (ClientObexConnection)Connector.open("obex:/irclient");
       coc.connect(); // IrDA の場合、この時点でデバイスに通電して
                      // CONNECT オペレーションを発行します。
       while (true) { // 複数のオペレーションを行う場合のループ。
                      // ループの中で PUT と GET を組み合わせて使用してもよい。
           coc.setOperation(ObexConnection.GET);
           coc.setName("bar");
           coc.sendRequest(); // IrDA の場合、この時点で GET オペレーションを
                              // 送信して、レスポンスを受け取ります。
           int response = coc.getResponseCode();
           InputStream in = coc.openInputStream();
           // 読み出し処理
           in.close();
       }
       coc.close(); // IrDA の場合、この時点で DISCONNECT オペレーションを
                    // 発行して、デバイスをオフにします。
   } catch (IOException e) {
   }
 

[DoJa-5.1 (905i) 以降]
端末によっては、IrDA 通信に加え IrSimple 片方向通信と IrSimple 双方向通信をサポートします。 IrSimple 通信機能では、connect(int) によって通信モードを指定できます。 接続確立後、ObexConnection.getCommMode()を呼び出すことで通信モードを確認することができます。 なお、IrDA 通信のみサポートしているサーバに対して、IrSimple 双方向通信を試みた場合には、 IrSimple 通信機能の IrDA 通信互換により IrDA 通信で接続が確立されます。

IrSimple 片方向通信と IrSimple 双方向通信においては、 オペレーションとして PUT のみをサポートしています。

以下に IrSimple 片方向通信を行う場合のコード例を示します。
 
 try {
     ClientObexConnection coc;
     coc = (ClientObexConnection)Connector.open("obex:/irclient");
     coc.connect(ClientObexConnection.COMM_MODE_IRSIMPLE_UNILATERALLY); // この時点でデバイスに通電して
                                                   // CONNECT オペレーションを発行します。
                                                   // Server側からの接続要求応答がない為、
                                                   // 接続要求応答の受信が完了するまで待ちません。
     while (true) { // 複数のオペレーションを行う場合のループ。
                    // ループの中で PUT のみ指定できます。
         coc.setOperation(ObexConnection.PUT);
         coc.setName("foo");
         OutputStream out = coc.openOutputStream();
         // 書き込み処理
         out.close();
         coc.sendRequest(); // この時点で PUT オペレーションを送信します。
                            // Server側からのレスポンスがない為、レスポンスは受け取りません。
         int response = coc.getResponseCode(); // 必ずレスポンスコード「ObexConnection.SUCCESS」が返ります。
     }
     coc.close(); // IrSimple の場合、この時点で DISCONNECT オペレーションを
                  // 発行して、デバイスをオフにします。
 } catch (IOException e) {
 }
 
以下に IrSimple 双方向通信を行う場合のコード例を示します。
 try {
     ClientObexConnection coc;
     coc = (ClientObexConnection)Connector.open("obex:/irclient");
     coc.connect(ClientObexConnection.COMM_MODE_IRSIMPLE_INTERACTIVE); // この時点でデバイスに通電して
                                                  //  CONNECT オペレーションを発行します。
                                                  // Server側からの接続要求応答の受信が完了するまで待ちます。
     while (true) { // 複数のオペレーションを行う場合のループ。
                    // ループの中で PUT のみ指定できます。
         coc.setOperation(ObexConnection.PUT);
         coc.setName("foo");
         OutputStream out = coc.openOutputStream();
         // 書き込み処理
         out.close();
         coc.sendRequest(); // この時点で PUT オペレーションを送信して、レスポンスを受け取ります。
         int response = coc.getResponseCode();
     }
     coc.close(); // IrSimple の場合、この時点で DISCONNECT オペレーションを
                  // 発行して、デバイスをオフにします。
 } catch (IOException e) {
 }
 

導入されたバージョン:
DoJa-2.0

フィールドの概要
 
インタフェース com.nttdocomo.io.ObexConnection から継承したフィールド
ACCEPTED, BAD_GATEWAY, BAD_REQUEST, COMM_MODE_IRDA, COMM_MODE_IRSIMPLE_INTERACTIVE, COMM_MODE_IRSIMPLE_UNILATERALLY, CONFLICT, CONTINUE, CREATED, DATABASE_FULL, DATABASE_LOCKED, DISCONNECT, FORBIDDEN, GATEWAY_TIMEOUT, GET, GONE, HTTP_VERSION_NOT_SUPPORTED, INTERNAL_SERVER_ERROR, LENGTH_REQUIRED, METHOD_NOT_ALLOWED, MOVED_PERMANENTLY, MOVED_TEMPORARILY, MULTIPLE_CHOICES, NO_CONTENT, NON_AUTHORITATIVE_INFORMATION, NOT_ACCEPTABLE, NOT_FOUND, NOT_IMPLEMENTED, NOT_MODIFIED, PARTIAL_CONTENT, PAYMENT_REQUIRED, PRECONDITION_FAILED, PROXY_AUTHENTICATION_REQUIRED, PUT, REQUEST_ENTITY_TOO_LARGE, REQUEST_TIME_OUT, REQUEST_URL_TOO_LARGE, RESET_CONTENT, SEE_OTHER, SERVICE_UNAVAILABLE, SUCCESS, UNAUTHORIZED, UNSUPPORTED_MEDIA_TYPE, USE_PROXY
 
メソッドの概要
 void connect()
           接続を確立します。
 void connect(int mode) [iアプリオプションAPI]
          通信モードに対応した接続を確立します。
 int getResponseCode()
           レスポンスコードを取得します。
 void sendRequest()
           リクエストを送信して、レスポンスの受信を完了するまで待ちます。
 void setOperation(int operation)
           オペレーションコードを設定します。
 
インタフェース com.nttdocomo.io.ObexConnection から継承したメソッド
getCommMode, getContentLength, getName, getTime, getType, setName, setTime, setType
 
インタフェース javax.microedition.io.InputConnection から継承したメソッド
openDataInputStream, openInputStream
 
インタフェース javax.microedition.io.Connection から継承したメソッド
close
 
インタフェース javax.microedition.io.OutputConnection から継承したメソッド
openDataOutputStream, openOutputStream
 

メソッドの詳細

connect

public void connect()
             throws java.io.IOException
接続を確立します。

例外:
ConnectionException - [DoJa-2.x のみ] サポートしている以上の接続を使おうとした場合に発生します(BUSY_RESOURCE)。
ConnectionException - [DoJa-3.0 (505i) 以降] 既に接続要求発行中の別スレッドが存在するか、別オブジェクトにより既に通信リソースが使用されている場合に発生します(BUSY_RESOURCE)。
ConnectionException - 端末がセルフモードの場合に発生します(SELF_MODE)。
SecurityException - [DoJa-3.0 (505i) 以降] OBEX の使用が許可されていない場合に発生します。
java.io.InterruptedIOException - [DoJa-2.x] 別スレッドからの中断要求やサスペンド により通信が中断された場合に発生します。
java.io.InterruptedIOException - [DoJa-3.0] 別スレッドからの中断要求やサスペンド、 待ち受けアプリケーションでの非活性化状態への遷移により通信が中断された場合に発生します。
java.io.InterruptedIOException - [DoJa-3.5 (900i) 以降] 別スレッドからの中断要求発生、動画再生(コンポーネント上における再生に限る)の開始、 待ち受けアプリケーションでの非活性化状態への遷移により、 通信が中断された場合に発生します。
IllegalStateException - [DoJa-2.1 以降] 音声・テレビ電話通話中に呼び出された場合に発生します。
ConnectionException - [DoJa-3.0 (505i) 以降] 赤外線リモコンが通信中である場合に発生します (BUSY_RESOURCE)。
ConnectionException - [DoJa-5.0 (903i) 以降] アドホック通信中の場合に発生します(BUSY_RESOURCE)。
ConnectionException - [DoJa-4.0 (901i) 以降] バックグラウンドで動作しているネイティブ機能が、 パケット通信中の場合に発生します(BUSY_RESOURCE)。
[DoJa-4.1 (902i) 以降] PTT呼通信中、PTT設定中に呼び出された場合にも発生します。
[DoJa-5.1 (905i) 以降] ミュージックチャネルダウンローダが起動中の場合にも発生します。

[DoJa-5.1 (906i) 以降] ソフトウェア更新のダウンロード通知機能が起動中の場合にも発生します。
ConnectionException - ネイティブのOBEXレイヤでタイムアウトが発生した場合に発生します(TIMEOUT)。
ConnectionException - ユーザが通信開始を許可しなかった場合や、 ユーザ操作により通信を中断された場合に発生します(USER_ABORT)。
java.io.IOException - I/O エラーが発生した場合に発生します。

connect

public void connect(int mode)
             throws java.io.IOException [iアプリオプションAPI]
通信モードに対応した接続を確立します。

以下の通信モードを指定できます。

ObexConnection.COMM_MODE_IRDA を指定した場合は、IrDA 通信を試みます。 connect() の振る舞いと同じになります。

ObexConnection.COMM_MODE_IRSIMPLE_INTERACTIVE を指定した場合は、IrSimple 双方向通信を試みます。 サーバが IrDA 通信のみサポートしている場合、 IrSimple 通信機能の IrDA 通信互換により IrDA 通信で接続が確立されます。

ObexConnection.COMM_MODE_IRSIMPLE_UNILATERALLY を指定した場合は、IrSimple 片方向通信を試みます。 IrSimple 片方向通信においては、サーバからレスポンスが送信されないため、 サーバとの接続の確立を待たずにこのメソッドから戻ります。 このため、このメソッドで ConnectionException(TIMEOUT) が発生することはありません。

接続確立後、ObexConnection.getCommMode() を呼び出すことで実際の通信モードを確認することができます。

端末によっては、IrSimple 通信機能をサポートしていない場合があります。 その場合には、例外 UnsupportedOperationException が発生します。

パラメータ:
mode - 通信モード
例外:
UnsupportedOperationException - 端末が IrSimple 通信機能をサポートしていない場合に発生します。
IllegalArgumentException - 引数 mode に不正な値が指定された場合に発生します。
ConnectionException - 既に接続要求発行中の別スレッドが存在するか、別オブジェクトにより既に通信リソースが使用されている場合に発生します(BUSY_RESOURCE)。
ConnectionException - 端末がセルフモードの場合に発生します(SELF_MODE)。
SecurityException - OBEX の使用が許可されていない場合に発生します。
java.io.InterruptedIOException - 別スレッドからの中断要求発生、動画再生 (コンポーネント上における再生に限る)の開始、 待ち受けアプリケーションでの非活性化状態への遷移により、 通信が中断された場合に発生します。
IllegalStateException - 音声・テレビ電話通話中に呼び出された場合に発生します。
ConnectionException - 赤外線リモコンが通信中である場合に発生します