|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
UDP プロトコルでのネットワークへの接続を定義します。この機能は、パーミッションとして UDP 通信(クライアント/サーバー型もしくはPeer-to-Peer型)が許可されたトラステッドStarアプリでのみ利用することができます。
UDP 通信では、端末に対してドコモ網から接続に必要な情報(IPアドレス、ポート番号等)を取得した後、接続を確立して通信を行います。
端末⇔コンテンツプロバイダ間で通信する「クライアント/サーバ型接続」、あるいは端末⇔端末間で通信する「Peer-to-Peer型接続」のいずれかの方式で通信を行うことができます。詳細は後述を参照してください。
本インタフェースには、以下の状態が存在します。
openRemotePort() メソッドを実行するとポートオープン状態に遷移します。openRemotePort() メソッドは実行可能です。send(Datagram)、receive(Datagram) など)を利用して UDP 通信を行うことができます。connect()、connect(String, int))は、ポートオープン状態からのみ実行可能です。close() メソッドを実行すると UDP 通信不可状態に遷移します。close() メソッドは、任意の状態で実行することが可能です。UDP 通信は「クライアント/サーバ型接続」、もしくは「Peer-to-Peer型接続」のいずれかの方式で通信を行うことができます。 以下にそれぞれの方式についての詳細を述べます。
Connector.open() メソッドで、接続先 URL を以下の形式で指定するとUDP通信:クライアント/サーバ型接続となります。
"datagram://<ホスト名>:<ポート番号>"
以下に UDP 通信においてクライアント/サーバ型接続を行う場合のコード例を示します。
UDPDatagramConnection udc = (UDPDatagramConnection)Connector.open("datagram://example.com:12345");
udc.openRemotePort(); // ドコモサーバに対してグローバルIPアドレスとポート番号の払い出し要求を行う。
udc.connect(); // 端末とサーバ間の接続先の指定を行います。
//データグラム送信
Datagram sdg = udc.newDatagram(udc.getNominalLength()); // データグラム生成
sdg.setData(…);
udc.send(sdg);
//データグラム受信
Datagram rdg = udc.newDatagram(udc.getNominalLength()); // データグラム生成
udc.receive(rdg);
udc.close(); // 接続を閉じてリソースを解放します。
Connector.open() メソッドで、接続先 URL を以下の形式で指定するとUDP通信:Peer-to-Peer型接続となります。
"datagram://<P-to-P用URL>"
<P-to-P用URL> 部分には通信がPeer-to-Peer型接続であることを示す固定文字列を設定します。
以下に UDP 通信において 端末Aと端末BがサーバCより相互に通信相手に払い出されたIPアドレスとポート番号について通知を受け、 Peer-to-Peer 型接続を行う場合のコード例を示します。(この例ではサーバCとの通信でHTTPコネクションを使用し、通信相手アドレスを交換します。サーバはマッチングサーバ・ゲームサーバであることが想定されます)
※端末A※
// ① グローバルIPアドレスとポート番号をサーバーCに送信する。 //
// ② サーバーCから端末BのグローバルIPアドレスとポート番号取得する。 //
// ③ 端末Bに対して接続先の指定を行う。 //
// ① //
UDPDatagramConnection udcA = (UDPDatagramConnection)Connector.open("datagram://<P-to-P用URL>");
udcA.openRemotePort(); // グローバルIPアドレスとポート番号を払い出してもらう。
String addressMobileA = udcA.getLocalAddress(); // 端末Aに払い出されたIPアドレスを取得
int portMobileA = udcA.getLocalPort(); //端末Aに払い出されたポート番号を取得
HttpConnection hcA = (HttpConnection)Connector.open("http://<サーバーCのホスト名>");
//サーバCに対して端末Aに払い出されたIPアドレスとポート番号を送信
// ② //
hcA.connect(…);
//サーバCから、端末Bに払い出されたIPアドレスとポート番号を受信
// ③ //
udcA.connect(addressMobileB, portMobileB); // 端末Bに対して Peer-to-Peer 接続要求を行う。
//データグラム送信
Datagram sdgA = udcA.newDatagram(udc.getNominalLength()); // データグラム生成
sdgA.setData(…);
udcA.send(sdg);
//データグラム受信
Datagram rdgA = udcA.newDatagram(udc.getNominalLength()); // データグラム生成
udcA.receive(rdgA);
udcA.close(); // 接続を閉じてリソースを解放します。
※端末B※
//端末Aの通信相手である端末Bは、端末Aのものと処理上の差異がありません。コード例の記載は省略します。
| メソッドの概要 | |
void |
close()
接続を閉じてリソースを解放します。 |
void |
connect()
クライアント/サーバ型接続にて、接続先の指定を行い UDP 通信可能状態に遷移します。 |
void |
connect(String host,
int port)
Peer-to-Peer 型接続にて、接続先の指定を行い UDP 通信可能状態に遷移します。 |
String |
getLocalAddress()
端末に払い出された IP アドレスを取得します。 |
int |
getLocalPort()
端末に払い出されたポート番号を取得します。 |
int |
getMaximumLength()
データグラムがとり得る最大の長さを取得します。 |
int |
getNominalLength()
データグラムの標準の長さを取得します。 |
javax.microedition.io.Datagram |
newDatagram(byte[] buf,
int size)
新しいデータグラムオブジェクトを作成します。 |
javax.microedition.io.Datagram |
newDatagram(byte[] buf,
int size,
String addr)
新しいデータグラムオブジェクトを作成します。 |
javax.microedition.io.Datagram |
newDatagram(int size)
新しいデータグラムオブジェクトを作成します。 |
javax.microedition.io.Datagram |
newDatagram(int size,
String addr)
新しいデータグラムオブジェクトを作成します。 |
void |
openRemotePort()
グローバルIPアドレスとポート番号の払い出し要求を行います。 |
void |
receive(javax.microedition.io.Datagram dgram)
データグラムを受信します。 |
void |
send(javax.microedition.io.Datagram dgram)
データグラムを送信します。 |
| メソッドの詳細 |
public void close()
throws java.io.IOException
ネットワークのリソース、及び送受信バッファ等のリソースは全て破棄されます。
javax.microedition.io.Connection 内の closeConnectionException - ConnectionException - java.io.InterruptedIOException -
java.io.IOException -
public void connect()
throws java.io.IOException
Connector.open() メソッドの引数 name に指定した接続先 URL に対して接続先の指定を行います。
メソッドを呼び出した場合、Star アプリはサスペンドせずに接続処理を行います。 このメソッドはブロッキングメソッドとして動作します。
本メソッドはクライアント/サーバ型接続時に使用します。 Peer-to-Peer型接続時に本メソッドが呼ばれた場合は例外が発生します。本メソッドはポートオープン状態で実行してください。 その他の状態で実行された場合は例外が発生します。
IllegalStateException -
ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - connect() を呼び出し中に、このメソッドを呼び出した場合に発生します。
IllegalStateException -
connect(String, int) を呼び出し中に、このメソッドを呼び出した場合も含みます。
java.io.InterruptedIOException -
java.io.IOException -
public void connect(String host,
int port)
throws java.io.IOException
引数に指定した接続先に対して UDP 通信の接続先指定を行います。 引数の接続先には、ドコモ網から払い出された接続先の IP アドレス、及びポート番号を指定してください。 クライアント/サーバ型接続時に本メソッドが呼ばれた場合は例外が発生します。
メソッドを呼び出した場合、Star アプリはサスペンドせずに接続処理を行います。 このメソッドはブロッキングメソッドとして動作します。
本メソッドはポートオープン状態で実行してください。 その他の状態で実行された場合は例外が発生します。
host - 接続先のIPアドレスを指定します。port - 接続先ポート番号を指定します。
IllegalArgumentException -
IllegalArgumentException -
IllegalStateException -
ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - connect(String, int) を呼び出し中に、このメソッドを呼び出した場合に発生します。
IllegalStateException -
connect() を呼び出し中に、このメソッドを呼び出した場合も含みます。
java.io.InterruptedIOException -
NullPointerException -
java.io.IOException -
public void openRemotePort()
throws java.io.IOException
払い出されたアドレスはgetLocalAddress()、getLocalPort() メソッドで取得できます。
メソッドを呼び出した場合、Star アプリはサスペンドせずに接続処理を行います。 このメソッドはブロッキングメソッドとして動作します。
本メソッドは初期状態で実行してください。 その他の状態で実行された場合は例外が発生します。
IllegalStateException -
ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - ConnectionException - openRemotePort() を呼び出し中に、このメソッドを呼び出した場合に発生します。
java.io.InterruptedIOException -
java.io.IOException -
public void receive(javax.microedition.io.Datagram dgram)
throws java.io.IOException
このメソッドはデータグラムが受信されるまでブロックされます。Datagram オブジェクトの内部状態変数 length には、受信済みデータグラムの長さが格納されます。受信済みデータが内部バッファの長さとオフセットの差より長い場合、データは切り詰められます。
このメソッドでは、Datagram オブジェクトの内部状態変数 read/write pointer は変更されません。データグラムの受信を開始する前に、必要に応じて Datagram.reset メソッドを実行し、ポインタを変更します。
javax.microedition.io.DatagramConnection 内の receivedgram - 受信データを表現するデータグラムオブジェクトを指定します。
IllegalStateException -
ConnectionException - ConnectionException - java.io.InterruptedIOException -
ConnectionException - NullPointerException -
IllegalArgumentException -
java.io.IOException -
public void send(javax.microedition.io.Datagram dgram)
throws java.io.IOException
Datagram オブジェクトには、送信するデータ、その長さ、および受信側のアドレスの情報が含まれます。 メソッドは、Datagram オブジェクトの現在の offset から length バイトを送信します。 length と offset は Datagram オブジェクトの内部状態変数です。
Datagram.setAddress() メソッド等によって、引数 dgram のデータグラムアドレスに通信が確立された 接続先以外のアドレスが指定されている状態で、本メソッドが呼ばれた場合は例外が発生します。
javax.microedition.io.DatagramConnection 内の senddgram - 送信データを表現するデータグラムオブジェクトを指定します。
IllegalStateException -
ConnectionException - ConnectionException - java.io.InterruptedIOException -
ConnectionException - SecurityException -
NullPointerException -
IllegalArgumentException -
java.io.IOException -
public int getMaximumLength()
この長さから、newDatagram メソッドを使用して作成できるデータグラムの最大サイズと、送信または受信可能なデータグラムの最大サイズが求められます。
javax.microedition.io.DatagramConnection 内の getMaximumLengthpublic int getNominalLength()
標準長は、データバッファに格納されるデータグラムのサイズを表します。標準長は、データグラムの最大長と同じか、それより短くなります。
javax.microedition.io.DatagramConnection 内の getNominalLengthpublic javax.microedition.io.Datagram newDatagram(int size)
本メソッドは UDP 通信可能状態で実行してください。 その他の状態で実行された場合は例外が発生します。
本メソッドで生成されたデータグラムに対してDatagram.getAddress() メソッドを実行した場合はnullを返します。
javax.microedition.io.DatagramConnection 内の newDatagramsize - データグラムに必要なバッファのサイズを指定します。
IllegalArgumentException -
データグラムの最大サイズよりも大きい場合IllegalStateException -
public javax.microedition.io.Datagram newDatagram(byte[] buf,
int size)
本メソッドは UDP 通信可能状態で実行してください。 その他の状態で実行された場合は例外が発生します。
本メソッドで生成されたデータグラムに対してDatagram.getAddress() メソッドを実行した場合はnullを返します。
javax.microedition.io.DatagramConnection 内の newDatagrambuf - データグラム用のバッファを指定します。size - データグラムに必要なバッファのサイズを指定します。
IllegalArgumentException -
データグラムの最大サイズよりも大きい場合IllegalStateException -
NullPointerException -
public javax.microedition.io.Datagram newDatagram(byte[] buf,
int size,
String addr)
本メソッドは UDP 通信可能状態で実行してください。 その他の状態で実行された場合は例外が発生します。
本メソッドの引数で指定するデータグラムの送信先アドレスには、
通信の確立された接続先を指定する必要があります。
本メソッドでは Datagram.setAddress(String) と同等のアドレスのフォーマットチェックを行いますが、
送信先アドレスに対する通信許可についてのチェックは行いません。
送信先アドレスの通信許可チェックは、
データグラム送信時(send(Datagram)) に行われます。
javax.microedition.io.DatagramConnection 内の newDatagrambuf - データグラム用のバッファを指定します。size - データグラムに必要なバッファのサイズを指定します。addr - データグラムの送信先である入出力アドレスを指定します。未指定(nullを指定)とすることが可能です。
IllegalArgumentException -
データグラムの最大サイズよりも大きい場合IllegalArgumentException -
IllegalStateException -
NullPointerException -
public javax.microedition.io.Datagram newDatagram(int size,
String addr)
本メソッドは UDP 通信可能状態で実行してください。 その他の状態で実行された場合は例外が発生します。
本メソッドの引数で指定するデータグラムの送信先アドレスには、
通信の確立された接続先を指定する必要があります。
本メソッドでは Datagram.setAddress(String) と同等のアドレスのフォーマットチェックを行いますが、
送信先アドレスに対する通信許可についてのチェックは行いません。
送信先アドレスの通信許可チェックは、
データグラム送信時(send(Datagram)) に行われます。
javax.microedition.io.DatagramConnection 内の newDatagramsize - データグラムに必要なバッファのサイズを指定します。addr - データグラムの送信先である入出力アドレスを指定します。未指定(nullを指定)とすることが可能です。
IllegalArgumentException -
データグラムの最大サイズよりも大きい場合IllegalArgumentException -
IllegalStateException -
public String getLocalAddress()
本メソッドは ポートオープン状態、もしくは UDP 通信可能状態で実行してください。 その他の状態で実行された場合は例外が発生します。
IllegalStateException -
public int getLocalPort()
本メソッドは ポートオープン状態、もしくは UDP 通信可能状態で実行してください。 その他の状態で実行された場合は例外が発生します。
IllegalStateException -
|
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
NTT DOCOMO,INC.
本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。
Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。
FeliCaは、ソニー株式会社が開発した非接触ICカードの技術方式です。FeliCaは、ソニー株式会社の登録商標です。
「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。
その他記載された会社名、製品名などは該当する各社の商標または登録商標です。