|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
public interface SocketConnection
TCP プロトコルでのネットワークへの接続を定義します。この機能は、パーミッションとして TCP 通信(クライアント/サーバー型もしくはPeer-to-Peer型)が許可されたトラステッドStarアプリでのみ利用することができます。
TCP 通信では、端末に対してドコモ網から接続に必要な情報(IPアドレス、ポート番号等)を取得した後、TCP セッションを確立して通信を行います。
[Star-1.3 まで] Star アプリがサスペンドすると必ず通信が切断されます。
[Star-1.5 以降] Star アプリがサスペンドしても通信が継続されます。
ただし、競合条件によっては、サスペンド時に通信が切断される場合もあります。
端末⇔コンテンツプロバイダ間で通信する「クライアント/サーバ型接続」、あるいは端末⇔端末間で通信する「Peer-to-Peer型接続」のいずれかの方式で通信を行うことができます。詳細は後述を参照してください。
本インタフェースには、以下の状態が存在します。
openRemotePort()
メソッドを実行するとポートオープン状態に遷移します。openRemotePort()
メソッドは実行可能です。connect()
、connect(String, int)
)は、ポートオープン状態からのみ実行可能です。listen(String, int)
メソッドを実行すると接続待ち状態になります。listen(String, int)
メソッドはセッションが確立されるまで処理をブロックします。listen(String, int)
メソッドはポートオープン状態からのみ実行可能です。close()
メソッドを実行すると TCP 通信不可状態に遷移します。close()
メソッドは、任意の状態で実行することが可能です。TCP 通信は「クライアント/サーバ型接続」、もしくは「Peer-to-Peer型接続」のいずれかの方式で通信を行うことができます。 以下にそれぞれの方式についての詳細を述べます。
Connector.open() メソッドで、接続先 URL を以下の形式で指定するとTCP通信:クライアント/サーバ型接続となります。
"socket://<ホスト名>:<ポート番号>"
以下に TCP 通信においてクライアント/サーバ型接続を行う場合のコード例を示します。
SocketConnection sc = (SocketConnection)Connector.open("socket://example.com:12345"); sc.openRemotePort(); // ドコモサーバに対してグローバルIPアドレスとポート番号の払い出し要求を行う。 sc.connect(); // 端末とサーバ間のセッションを確立します。 InputStream in = sc.openInputStream(); OutputStream out = sc.openOutputStream(); // 読み込み、書き込み処理 in.close(); out.close(); sc.close(); // 接続を閉じてリソースを解放します。
Connector.open() メソッドで、接続先 URL を以下の形式で指定するとTCP通信:Peer-to-Peer型接続となります。
"socket://<P-to-P用URL>"
<P-to-P用URL> 部分には通信がPeer-to-Peer型接続であることを示す固定文字列を設定します。
以下に TCP 通信において 端末Aと端末BがサーバCより相互に通信相手に払い出されたIPアドレスとポート番号について通知を受け、 Peer-to-Peer 型接続を行う場合のコード例を示します。(この例ではサーバCとの通信でHTTPコネクションを使用し、通信相手アドレスを交換します。サーバはマッチングサーバ・ゲームサーバであることが想定されます)
※端末A※ // ① グローバルIPアドレスとポート番号をサーバーCに送信する。 // // ② サーバーCから端末BのグローバルIPアドレスとポート番号取得する。 // // ③ 端末Bに対してセッションの確立を行う。 // // ① // SocketConnection scA = (SocketConnection)Connector.open("socket://<P-to-P用URL>"); scA.openRemotePort(); // グローバルIPアドレスとポート番号を払い出してもらう。 String addressMobileA = scA.getLocalAddress(); // 端末Aに払い出されたIPアドレスを取得 int portMobileA = scA.getLocalPort(); //端末Aに払い出されたポート番号を取得 HttpConnection hcA = (HttpConnection)Connector.open("http://<サーバーCのホスト名>"); //サーバCに対して端末Aに払い出されたIPアドレスとポート番号を送信 // ② // hcA.connect(…); //サーバCから、端末Bに払い出されたIPアドレスとポート番号を受信 // ③ // scA.connect(addressMobileB, portMobileB); // 端末Bに対して Peer-to-Peer 接続要求を行う。 InputStream in = scA.openInputStream(); OutputStream out = scA.openOutputStream(); // 読み込み、書き込み処理 in.close(); out.close(); scA.close(); // 接続を閉じてリソースを解放します。 ※端末B※ // ① グローバルIPアドレスとポート番号をサーバーCに送信する。 // ② サーバCから端末AのグローバルIPアドレスとポート番号を取得する。 // // ③ 端末AのグローバルIPアドレスとポート番号からのセッション確立要求待ち状態に遷移する。 // // ① // SocketConnection scB = (SocketConnection)Connector.open("socket://<P-to-P用URL>"); scB.openRemotePort(); // グローバルIPアドレスとポート番号を払い出してもらう。 String addressMobileB = scB.getLocalAddress(); // 端末Bに払い出されたIPアドレスを取得 int portMobileB = scB.getLocalPort(); //端末Bに払い出されたポート番号を取得 HttpConnection hcB = (HttpConnection)Connector.open("http://<サーバーCのホスト名>"); //サーバCに対して端末Bに払い出されたIPアドレスとポート番号を送信 // ② // hcB.connect(…); //サーバCから、端末Aに払い出されたIPアドレスとポート番号を受信 // ③ // scB.listen(addressMobileA, portMobileA); // 端末Aからの接続要求を待つ。 InputStream in = scB.openInputStream(); OutputStream out = scB.openOutputStream(); // 読み込み、書き込み処理 in.close(); out.close(); scB.close(); // 接続を閉じてリソースを解放します。
メソッドの概要 | |
---|---|
void |
close()
接続を閉じてリソースを解放します。 |
void |
connect()
クライアント/サーバ型接続にて、接続先に対してセッションを確立します。 |
void |
connect(String host,
int port)
Peer-to-Peer 型接続にて、指定した接続先に対してセッションを確立します。 |
String |
getAddress()
接続先のアドレスを取得します。 |
String |
getLocalAddress()
端末に払い出された IP アドレスを取得します。 |
int |
getLocalPort()
端末に払い出されたポート番号を取得します。 |
int |
getPort()
接続先ポート番号を取得します。 |
void |
listen(String host,
int port)
Peer-to-Peer 型接続にて、指定した接続先からの接続を待ち受けます。 |
java.io.DataInputStream |
openDataInputStream()
データ入力ストリームを取得します。 |
java.io.DataOutputStream |
openDataOutputStream()
データ出力ストリームを取得します。 |
java.io.InputStream |
openInputStream()
入力ストリームを取得します。 |
java.io.OutputStream |
openOutputStream()
出力ストリームを取得します。 |
void |
openRemotePort()
グローバルIPアドレスとポート番号の払い出し要求を行います。 |
メソッドの詳細 |
---|
void close() throws java.io.IOException
ネットワークのリソース、及び送受信バッファ等のリソースは全て破棄されます。
javax.microedition.io.Connection
内の close
ConnectionException
- ConnectionException
- java.io.InterruptedIOException
-
java.io.IOException
-
void connect() throws java.io.IOException
Connector.open() メソッドの引数 name に指定した接続先 URL に対してセッションを確立します。
メソッドを呼び出した場合、Star アプリはサスペンドせずに接続処理を行います。 このメソッドはブロッキングメソッドとして動作します。
本メソッドはクライアント/サーバ型接続時に使用します。 Peer-to-Peer型接続時に本メソッドが呼ばれた場合は例外が発生します。本メソッドはポートオープン状態で実行してください。 その他の状態で実行された場合は例外が発生します。
ConnectionException
- IllegalStateException
-