|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
OBEX でサーバとして通信を行う場合の接続を定義します。
オペレーションとして PUT と GET と DISCONNECT をサポートしています。
一回の接続で複数回 receiveRequest メソッドを呼び出すことが可能で、
連続して複数のリクエストを受信することができます。
PUT オペレーションのリクエストの BODY ヘッダの内容は
InputStream または DataInputStream から読み出すことができます。
GET オペレーションのリクエストの場合、
InputStream または DataInputStream は常に空のストリームとなります。
ObexConnection インタフェースで定義されている getContentLength メソッドは
リクエストの BODY ヘッダ内のコンテンツの長さを返します。
[DoJa-5.1 (905i) 以降]
IrSimple 片方向通信と IrSimple 双方向通信においては、
オペレーションとして PUT と DISCONNECT をサポートしています。
以下にコード例を示します。
また、OutputStream または DataOutputStream に出力したデータが
GET オペレーションに対するレスポンスの BODY ヘッダの内容としてクライアントに送信されます。
PUT オペレーションに対するレスポンスの場合、OutputStream または DataOutputStream に出力したデータは無視されます。
DISCONNECT オペレーションのリクエストを受信したら接続を閉じなければなりません。
端末によっては、 IrDA 通信に加え IrSimple 片方向通信と IrSimple 双方向通信をサポートします。
IrSimple 通信機能では、クライアントの通信モードに応じてサーバの通信モードが決まります。
接続確立後、ObexConnection.getCommMode()
を呼び出すことで通信モードを確認することができます。
try {
ServerObexConnection soc;
soc = (ServerObexConnection)Connector.open("obex:/irserver");
soc.accept(); // IrDA または IrSimple の場合、この時点でデバイスに通電して
// CONNECT オペレーションの待ち状態に入ります。
while (true) { // 複数のオペレーションを行う場合のループ
soc.receiveRequest(); // このメソッドから戻った時点で
// リクエストが到着しています。
int operation = soc.getOperation();
if (operation == ObexConnection.PUT) {
String name = soc.getName();
InputStream in = soc.openInputStream();
// 読み出し処理
in.close();
soc.sendResponse(ObexConnection.SUCCESS);
} else if (operation == ObexConnection.GET) {
String name = soc.getName();
OutputStream out = soc.openOutputStream();
// 書き込み処理
out.close();
soc.sendResponse(ObexConnection.SUCCESS);
} else if (operation == ObexConnection.DISCONNECT) {
break;
}
}
soc.close();
} catch (IOException e) {
}
フィールドの概要 |
メソッドの概要 | |
void |
accept()
接続要求を待ちます。 |
int |
getOperation()
リクエストのオペレーションを取得します。 |
void |
receiveRequest()
リクエストの受信を完了するのを待ちます。 |
void |
sendResponse(int code)
レスポンスを送信します。 |
インタフェース 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 |
メソッドの詳細 |
public void accept() 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)。
ConnectionException
- ネイティブの OBEX
レイヤでタイムアウトが発生した場合に発生します(TIMEOUT)。
ConnectionException
- ユーザが通信開始を許可しなかった場合や、
ユーザ操作により通信が中断された場合に発生します(USER_ABORT)。
java.io.IOException
- I/O エラーが発生した場合に発生します。
public void receiveRequest() throws java.io.IOException
このメソッドを呼び出すことによって、それより前にこの接続オブジェクトから 取り出した InputStream, DataInputStream, OutputStream, DataOutputStream が無効になります。 次に InputStream, DataInputStream を取り出した時は、 このリクエストで受信したデータを読み出す入力ストリームを返します。 また、次に OutputStream, DataOutputStream を取り出した時は、 このレスポンスで送信するデータを書き込む出力ストリームを返します。
[DoJa-5.1 (905i) 以降]
なお、IrSimple 片方向通信は実際にクライアントに対するレスポンスを送信しませんが、
このメソッドを呼び出した後に、必ず sendResponse メソッドを呼ばなければなりません。
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) 以降]
別スレッドからの中断要求発生、動画再生(コンポーネント上における再生に限る)の開始、
待ち受けアプリケーションでの非活性化状態への遷移により、
通信が中断された場合に発生します。
ConnectionException
- ネイティブの OBEX
レイヤでタイムアウトが発生した場合に発生します(TIMEOUT)。
ConnectionException
- ユーザ操作により通信を中断された場合や、ユーザ操作により通信を中断された直後に呼び出された場合
に発生します(USER_ABORT)。
java.io.IOException
- I/O エラーが発生した場合に発生します。public int getOperation()
RuntimeException
- 呼び出してはならない状態の時に呼び出された場合に発生します。
public void sendResponse(int code) throws java.io.IOException
レスポンスを送信します。
[DoJa-5.1 (905i) 以降]
ただし、IrSimple 片方向通信は実際にクライアントに対してレスポンスを送信しませんが、
receiveRequest メソッドを呼び出した後に必ずこのメソッドを呼ばなければなりません。
ミニマムスペックでは、以下のレスポンスコードがサポートされています。
ObexConnection.SUCCESS
ObexConnection.NON_AUTHORITATIVE_INFORMATION
ObexConnection.UNAUTHORIZED
ObexConnection.FORBIDDEN
ObexConnection.NOT_FOUND
ObexConnection.REQUEST_TIME_OUT
ObexConnection.CONFLICT
ObexConnection.NOT_IMPLEMENTED
ObexConnection.BAD_REQUEST
ObexConnection.DATABASE_FULL
ObexConnection.DATABASE_LOCKED
code
- レスポンスコードを指定します。
ConnectionException
- receiveRequest メソッドを呼び出す前に呼び出された場合に発生します(ILLEGAL_STATE)。
IllegalArgumentException
- 引数 code にサポートしていないレスポンスコードが指定された場合に発生します。
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) 以降]
別スレッドからの中断要求発生、動画再生(コンポーネント上における再生に限る)の開始、
待ち受けアプリケーションでの非活性化状態への遷移により、
通信が中断された場合に発生します。
ConnectionException
- ネイティブの OBEX
レイヤでタイムアウトが発生した場合に発生します(TIMEOUT)。
ConnectionException
- ユーザ操作により通信を中断された場合や、ユーザ操作により通信を中断された直後に呼び出された場合
に発生します(USER_ABORT)。
java.io.IOException
- I/O エラーが発生した場合に発生します。
|