|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
OBEXクライアントとして通信を行うためのフィールドやメソッドを定義したインタフェースです。
OBEXクライアントが使用するコネクションオブジェクトは ClientObexConnectionインタフェースを実装しています。 コネクションオブジェクトは、URL文字列"obex:/irclient"を指定してConnector.open()メソッドを呼び出すことにより取得します。
以下に OBEXクライアントとして通信を行う場合のコード例を示します。
try { ClientObexConnection coc; // ClientObexConnectionインスタンスの取得 coc = (ClientObexConnection)Connector.open("obex:/irclient", Connector.READ_WRITE); // OBEXサーバに接続 coc.connect(); // GETオペレーションの実行 coc.setOperation(ObexConnection.GET); // オペレーションを設定 coc.setName("sample_data1"); // NAMEヘッダを設定 coc.sendRequest(); // オペレーションを送信 // OBEXサーバから返却されたレスポンスコードをチェックし // 正常であれば受信したオブジェクトを読み込む int response = coc.getResponseCode(); if (response == ObexConnection.SUCCESS) { InputStream in = coc.openInputStream(); // 読み込み処理 in.close(); } else { throw new IOException(); } // PUTオペレーションの実行 coc.setOperation(ObexConnection.PUT); // オペレーションを設定 coc.setName("sample_data2"); // NAMEヘッダを設定 coc.setType("text/plain"); // TYPEヘッダを設定 coc.setTime(System.currentTimeMillis()); // TIMEヘッダを設定 OutputStream out = coc.openOutputStream(); // OBEXサーバへ送信するデータの書き込み処理 out.close(); coc.sendRequest(); // オペレーションを送信 //レスポンスコードが正常であれば処理を終了 response = coc.getResponseCode(); if (response != ObexConnection.SUCCESS) { throw new IOException(); } coc.close(); } catch (IOException e) { // 例外処理 }
JavaアプリケーションはOBEXクライアントとして通信を行う際に、connect()
メソッドを呼び出してOBEXサーバとの間に赤外線通信のリンクを確立します。
赤外線通信が確立されたリンク上では、複数のオペレーションを連続して処理することができます。
前出のサンプルコードでは、確立した通信リンク上でGETオペレーションとPUTオペレーションを1回ずつ処理し、
その後close()メソッドを呼び出して通信リンクを切断しています。
OBEXクライアントでのオペレーションの処理手順を以下に示します。
setOperation()
メソッドを呼び出してオペレーション種別を設定します。
sendRequest()
メソッドを使用してオペレーションをOBEXサーバへ送信します。
sendRequest()
は、OBEXサーバからのレスポンスをすべて受信するまでブロックします。
sendRequest()
から処理が戻ると、OBEXサーバから返されたOBEXレスポンスコードや、OBEXレスポンスヘッダの内容を参照することができます。
OBEXクライアントが参照することのできるOBEXレスポンスヘッダには、Nameヘッダ、Typeヘッダ、Timeヘッダがあります。
OBEXレスポンスコードは ObexConnection
で定義されています。
定義されているOBEXレスポンスコードは、OBEX規格におけるレスポンスコードの規定に準拠しています。
各コードの意味などの詳細についてはOBEX規格を参照してください。
OBEXサーバがOBEXクライアントの要求を正常に処理できた場合、一般的にはOBEXクライアントとして動作しているアプリケーションは、
OBEXレスポンスコードとして getResponseCode()
から ObexConnection.SUCCESS
を受け取ります。
getContentLength()
メソッドを使用して取得することができます。
OBEXクライアントの処理は、全体として上記のシーケンスに合わせるようにしてください。 たとえばオペレーション処理の要求をOBEXサーバに送信していない状態でOBEXレスポンスヘッダを取得しようとすると例外が発生します。
以下にClientObexConnectionの状態遷移を示します。
図1. ClientObexConnectionの状態遷移
connect()
が呼び出されたときに自動的に行われます。
connect()
メソッドやsendRequest()
メソッドを呼び出してOBEXサーバのアクションを待っている間に、
他のスレッドがClientObexConnectionオブジェクトのclose()メソッドを呼び出すとOBEX通信は中断されます。
この場合、JavaアプリケーションではInterruptedIOException 例外が発生します。
また、タイムアウトやユーザーの中断操作などの要因によって通信が切断されることがあります。
メソッドの概要 | |
void |
connect()
接続を確立します。 |
int |
getResponseCode()
レスポンスコードを取得します。 |
void |
sendRequest()
リクエストを送信してレスポンスを受信します。 |
void |
setOperation(int operation)
オペレーションコードを指定します。 |
インタフェース com.j_phone.io.ObexConnection から継承したメソッド |
getContentLength, getName, getTime, getType, setName, setTime, setType |
インタフェース javax.microedition.io.InputConnection から継承したメソッド |
openDataInputStream, openInputStream |
インタフェース javax.microedition.io.Connection から継承したメソッド |
close |
インタフェース javax.microedition.io.OutputConnection から継承したメソッド |
openDataOutputStream, openOutputStream |
メソッドの詳細 |
public void connect() throws java.io.IOException
ConnectionException
- サポートしている数以上の接続を使おうとした場合に発生する(RESOURCE_BUSY
)ConnectionException
- ネイティブの OBEX レイヤでタイムアウトが発生した場合に発生する(TIMEOUT
)ConnectionException
- ユーザー操作により通信が中断された場合に発生する。(USER_ABORT
)InterruptedIOException
- 別スレッドからの中断要求やサスペンドにより通信が中断された場合に発生するjava.io.IOException
- I/Oエラーが発生した場合に発生するSecurityException
- OBEX の使用が許可されていない場合に発生するpublic void setOperation(int operation)
operation
- オペレーションコードjava.lang.IllegalArgumentException
- 引数operationにサポートされていないオペレーションコードが指定された場合に発生するpublic void sendRequest() throws java.io.IOException
このメソッドは、リクエストを送信してからレスポンスをすべて受信するまでブロックします。 レスポンスの受信がすべて終わった時点でこのメソッドから戻ります。
このメソッドを呼び出すと、それより前にこの接続オブジェクトから取り出した InputStream、DataInputStream、OutputStream、DataOutputStream が無効になります。 次に InputStream、DataInputStream を取り出した時は、このリクエストにより受信したデータを読み出す入力ストリームを返します。 また、次に OutputStream、DataOutputStream を取り出した時は、次のリクエストで送信するデータを書き込む出力ストリームを返します。
java.io.IOException
- I/Oエラーが発生した場合に発生するConnectionException
- オペレーションが設定されていない場合に発生する(ILLEGAL_STATE
)ConnectionException
- ネイティブの OBEX レイヤでタイムアウトが発生した場合に発生する(TIMEOUT
)ConnectionException
- ユーザー操作により通信が中断された場合に発生する(USER_ABORT
)ConnectionException
- レスポンスコードが 0x20 番台(generally ok 系のステータスコード)
以外だった場合に発生する(OBEX_ERROR
)InterruptedIOException
- 別スレッドからの中断要求やサスペンドにより通信が中断された場合に発生するpublic int getResponseCode()
sendRequest()
メソッドにおいて受信したレスポンスのレスポンスコードを返します。java.lang.RuntimeException
- sendRequest()メソッドを呼び出す前に呼び出された場合に発生する
|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 内部クラス | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |