パッケージ | flash.net |
クラス | public class DatagramSocket |
継承 | DatagramSocket ![]() ![]() |
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
AIR プロファイルのサポート:この機能はすべてのデスクトップオペレーティングシステム、iOS(AIR 3.8 以降)、Android(AIR 3.8 以降)でサポートされます。この機能は、AIR for TV デバイスではサポートされません。DatagramSocket.isSupported
プロパティを使用して、サポートされているかどうかを実行時にテストすることができます。複数のプロファイル間での API サポートについて詳しくは、AIR プロファイルのサポートを参照してください。
データグラムパケットはソースとターゲット間で個別に送信されます。 パケットは、送信順序とは異なる順序で受信されることもあります。送信中に消失したパケットは再送信されることも検出されることもありません。
データグラムソケットを使用して送信されたデータは、自動的に送信可能なサイズのパケットに分割されることはありません。MTU(Maximum Transmission Unit)のサイズを超える UDP パケットを送信すると、そのパケットはネットワークによって廃棄されます(警告は表示されません)。制限 MTU は、送信パス内のインターフェイス、スイッチ、またはルーターの最小 MTU です。 NetworkInterface クラスを使用して、ローカルインターフェイスの MTU を決めることができますが、ネットワーク内の他のノードが異なる MTU 値を持つ可能性があります。
Socket クラスは、保証されたパケット配信を提供し、大きなパケットを自動的に分割してもう一度組み立てる TCP を使用します。TCP はまた、ネットワーク帯域幅の管理に優れています。これらの機能により、TCP ソケットを使用して送信されたデータでレーテンシーが高くなりますが、ほとんどの用途において、TCP を使用するメリットは、そのコストをはるかに上回ります。たいていのネットワーク通信は DatagramSocket クラスではなく、Socket クラスを使用します。
DatagramSocket クラスは、小さな転送レーテンシーが重要でパケットの消失を許容できるアプリケーションを操作する場合に便利です。例えば、VoIP (voice-over-IP)アプリケーションのネットワーク操作やリアルタイムのマルチプレイヤーゲームが UDP の恩恵を受ける場合がよくあります。 DatagramSocket クラスは、サーバー側アプリケーションでも便利です。UDP はステートレスプロトコルなので、サーバーは TCP よりも多くのクライアントからの多くの要求を処理できます。
DatagramSocket クラスは Adobe AIR アプリケーションでのみ使用でき、アプリケーションセキュリティサンドボックスでのみ使用できます。
セキュリティについて詳しくは、Flash Player デベロッパーセンターのトピック:セキュリティを参照してください。
詳細
関連する API エレメント
プロパティ | 定義元 | ||
---|---|---|---|
bound : Boolean [読み取り専用]
このソケットオブジェクトが現在ローカルのアドレスとポートにバインドされているかどうかを示します。 | DatagramSocket | ||
connected : Boolean [読み取り専用]
このソケットオブジェクトが現在リモートのアドレスとポートにバインドされているかどうかを示します。 | DatagramSocket | ||
![]() | constructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクター関数への参照です。 | Object | |
isSupported : Boolean [静的] [読み取り専用]
DatagramSocket 機能がランタイム環境でサポートされているかどうかを示します。 | DatagramSocket | ||
localAddress : String [読み取り専用]
ローカルマシン上でこのソケットがバインドされている IP アドレス。 | DatagramSocket | ||
localPort : int [読み取り専用]
ローカルマシン上でこのソケットがバインドされているポート。 | DatagramSocket | ||
remoteAddress : String [読み取り専用]
このソケットが接続されているリモートマシンの IP アドレス。 | DatagramSocket | ||
remotePort : int [読み取り専用]
このソケットが接続されているリモートマシンのポート。 | DatagramSocket |
メソッド | 定義元 | ||
---|---|---|---|
DatagramSocket オブジェクトを作成します。 | DatagramSocket | ||
![]() | addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。 | EventDispatcher | |
指定されたローカルのアドレスおよびポートにこのソケットをバインドします。 | DatagramSocket | ||
ソケットを閉じます。 | DatagramSocket | ||
指定されたリモートアドレスおよびポートにソケットを接続します。 | DatagramSocket | ||
![]() |
イベントをイベントフローに送出します。 | EventDispatcher | |
![]() |
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。 | EventDispatcher | |
![]() |
オブジェクトに指定されたプロパティが定義されているかどうかを示します。 | Object | |
![]() |
Object クラスのインスタンスが、パラメーターとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。 | Object | |
![]() |
指定されたプロパティが存在し、列挙できるかどうかを示します。 | Object | |
この DatagramSocket オブジェクトが、バインドされている IP アドレスおよびポートで着信パケットを受信できるようにします。 | DatagramSocket | ||
![]() |
EventDispatcher オブジェクトからリスナーを削除します。 | EventDispatcher | |
UDP を使用して、ByteArray にバイトを含むパケットを送信します。 | DatagramSocket | ||
![]() |
ループ処理に対するダイナミックプロパティの可用性を設定します。 | Object | |
![]() |
ロケール固有の規則に従って書式設定された、このオブジェクトのストリング表現を返します。 | Object | |
![]() |
指定されたオブジェクトのストリング表現を返します。 | Object | |
![]() |
指定されたオブジェクトのプリミティブな値を返します。 | Object | |
![]() |
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。 | EventDispatcher |
イベント | 概要 | 定義元 | ||
---|---|---|---|---|
![]() | [ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。 | EventDispatcher | ||
オペレーティングシステムがこのソケットを閉じたときに送出されます。 | DatagramSocket | |||
このソケットがデータのパケットを受信するときに送出されます。 | DatagramSocket | |||
![]() | [ブロードキャストイベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。 | EventDispatcher | ||
このソケットが I/O エラーを受信するときに送出されます。 | DatagramSocket |
bound | プロパティ |
connected | プロパティ |
isSupported | プロパティ |
localAddress | プロパティ |
localPort | プロパティ |
remoteAddress | プロパティ |
remotePort | プロパティ |
DatagramSocket | () | コンストラクター |
public function DatagramSocket()
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
DatagramSocket オブジェクトを作成します。
例外
SecurityError — AIR アプリケーションセキュリティサンドボックス外のコンテンツが DatagramSocket オブジェクトを作成しようとする場合。
|
bind | () | メソッド |
public function bind(localPort:int = 0, localAddress:String = "0.0.0.0"):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
指定されたローカルのアドレスおよびポートにこのソケットをバインドします。
bind()
メソッドは、同期的に実行されます。バインド操作は、コードの次の行が実行される前に完了します。
パラメーター
localPort:int (default = 0 ) — ローカルコンピューター上でバインドするポートの数。localPort が 0(デフォルト)に設定されている場合、次に利用可能なシステムポートがバインドされます。1024 より下位のポート番号に接続する権限には、システムのセキュリティポリシーが適用されます。例えば、Mac および Linux システムでは、アプリケーションは 1024 より下位のポートに接続するにはルート権限で実行する必要があります。
| |
localAddress:String (default = "0.0.0.0 ") — バインド先のローカルマシンの IP アドレス。このアドレスは、IPv4 アドレスでも IPv6 アドレスでもかまいません。localAddress が 0.0.0.0 (デフォルト値)に設定されている場合、ソケットは利用可能なすべての IPv4 アドレスを監視します。利用可能なすべての IPv6 アドレスを監視するには、"::" を localAddress 引数として指定する必要があります。IPv6 アドレスを使用するには、コンピューターとネットワークの両方が IPv6 をサポートするように設定されている必要があります。 さらに、IPv4 アドレスにバインドされたソケットは IPv6 アドレスのソケットに接続できません。同様に、IPv6 アドレスにバインドされたソケットは IPv4 アドレスのソケットに接続できません。アドレスの種類が一致している必要があります。
|
例外
RangeError — このエラーは、localPort が 0 未満か、または 65535 より大きい場合に発生します。
| |
ArgumentError — このエラーは、localAddress が構文的に整形式の IP アドレスになっていない場合に発生します。
| |
IOError — このエラーは、ソケットをバインドできない状況で発生します。例えば、次のような場合です。
| |
Error — このエラーは、localAddress が有効なアドレスでない場合に発生します。
|
例 ( この例の使用方法 )
udpSocket.bind(); //bind to any available port, listen on all IPv4 addresses udpSocket.bind( 0, "0.0.0.0" ); //same as above udpSocket.bind( 0, "127.0.0.1" ); //any available port on the localhost address udpSocket.bind( 8989, "192.168.0.1" ); //port 8989 on a particular IPv4 address udpSocket.bind( 0, "::" ); //any available port on all IPv6 address udpSocket.bind( 8989, "::1" ); //port 8989 on the IPv6 localhost address udpSocket.bind( 8989, "2001:1890:110b:1e19:f06b:72db:7026:3d7a" ); //port 8989 on a particular IPv6 address
close | () | メソッド |
connect | () | メソッド |
public function connect(remoteAddress:String, remotePort:int):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
指定されたリモートアドレスおよびポートにソケットを接続します。
データグラムソケットが「接続されている」場合、データグラムパケットは指定されたターゲットからのみ送受信できます。 その他のソースからのパケットは無視されます。データグラムソケットへの接続は必須ではありません。接続を確立すると、他のソースから不要なパケットを除外する必要がなくなります。ただし、UDP ソケット接続は(TCP 接続用なので)永続的なネットワーク接続ではありません。 ソケットのリモートエンドが存在していない可能性があります。
bind()
メソッドが呼び出されなかった場合、ソケットは自動的にデフォルトのローカルのアドレスとポートにバインドされます。
パラメーター
remoteAddress:String — 接続を確立するリモートマシンの IP アドレス。 このアドレスは、IPv4 アドレスでも IPv6 アドレスでもかまいません。bind() が呼び出されなかった場合は、デフォルトの bind() を呼び出すときに remoteAddress のアドレスファミリー(IPv4 または IPv6)が使用されます。
| |
remotePort:int — 接続の確立に使用するリモートマシン上のポート番号です。
|
例外
RangeError — このエラーは、localPort が 1 未満か、または 65535 より大きい場合に発生します。
| |
ArgumentError — このエラーは、localAddress が構文的に有効なアドレスになっていない場合に発生します。または、デフォルトのルートアドレス('0.0.0.0' または '::')が使用されている場合に発生します。。
| |
IOError — このエラーは、ソケットを接続できない場合に発生します。例えば、connect() の呼び出しの前に bind() が呼び出されていなかった場合や、リモートアドレスファミリーへのバインドができない場合などです。
|
receive | () | メソッド |
public function receive():void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
この DatagramSocket オブジェクトが、バインドされている IP アドレスおよびポートで着信パケットを受信できるようにします。
関数は直ちに戻ります。データパケットを受信すると、DatagramSocket オブジェクトによって data
イベントが送出されます。
イベント
data: — UDP パケットを受信した場合。
|
send | () | メソッド |
public function send(bytes:ByteArray, offset:uint = 0, length:uint = 0, address:String = null, port:int = 0):void
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
UDP を使用して、ByteArray にバイトを含むパケットを送信します。
ソケットが接続されている場合、パケットは connect()
メソッド内に指定されたポートとリモートアドレス宛に送信されるため、送信先 IP アドレスとポートを指定することはできません。ソケットが接続されていない場合、パケットは指定したアドレスとポートに送信されるため、address
と port
に有効な値を指定する必要があります。bind()
メソッドが呼び出されなかった場合、ソケットは自動的にデフォルトのローカルのアドレスとポートにバインドされます。
注意:ブロードキャストアドレスへのデータの送信はサポートされません。
パラメーター
bytes:ByteArray — パケットデータを含む ByteArray。
| |
offset:uint (default = 0 ) — パケットが始まる bytes ByteArray オブジェクトへのゼロベースのオフセット。
| |
length:uint (default = 0 ) — パケット内のバイト数。デフォルト値の 0 に設定すると、offset パラメーターで指定した値以降の ByteArray 全体が送信されます。
| |
address:String (default = null ) — リモートマシンの IPv4 または IPv6 アドレス。connect() メソッドを使用してアドレスが指定されていない場合、アドレスを指定する必要があります。
| |
port:int (default = 0 ) — リモートマシンのポート番号。connect() メソッドを使用してポートが指定されていない場合、0 ~ 65536 の値を指定する必要があります。
|
例外
RangeError — このエラーは、Port が 1 未満か、または 65535 より大きい場合に発生します。
| |
ArgumentError — ソケットが接続されておらず、address が構文的に有効な IP アドレスになっていない場合に発生します。
| |
IOError — このエラーは次の場合に発生します。
| |
Error — bytes パラメーターが null の場合に発生します。
| |
RangeError — offset が bytes で指定された ByteArray の長さよりも長い場合、または offset に length を加えた値によって記述されるように指定されたデータ量が、利用可能なデータを超過した場合に発生します。
| |
IllegalOperationError — ソケットが既に接続されている場合に、address または port パラメーターが指定されたときに発生します。
|
close | イベント |
flash.events.Event
プロパティ Event.type =
flash.events.Event.CLOSE
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
オペレーティングシステムがこのソケットを閉じたときに送出されます。
close
イベントは、DatagramSocket close()
メソッドが呼び出されるときに送出されません。
Event.CLOSE
定数は、type
プロパティ(close
イベントオブジェクト)の値を定義します。
このイベントには、次のプロパティがあります。
プロパティ | 値 |
---|---|
bubbles | false |
cancelable | false は、キャンセルするデフォルトの動作がないことを示します。 |
currentTarget | イベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。 |
target | 接続が閉じられたオブジェクトです。 |
data | イベント |
flash.events.DatagramSocketDataEvent
プロパティ DatagramSocketDataEvent.type =
flash.events.DatagramSocketDataEvent.DATA
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2 |
このソケットがデータのパケットを受信するときに送出されます。
type
プロパティ(data
イベントオブジェクト)の値を定義します。
ioError | イベント |
flash.events.IOErrorEvent
プロパティ IOErrorEvent.type =
flash.events.IOErrorEvent.IOERROR
言語バージョン: | ActionScript 3.0 |
ランタイムバージョン: | AIR 2.5 |
このソケットが I/O エラーを受信するときに送出されます。
package { import flash.display.Sprite; import flash.events.DatagramSocketDataEvent; import flash.events.Event; import flash.events.MouseEvent; import flash.events.TimerEvent; import flash.net.DatagramSocket; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFieldType; import flash.utils.ByteArray; import flash.utils.Timer; public class DatagramSocketExample extends Sprite { private var datagramSocket:DatagramSocket = new DatagramSocket();; private var localIP:TextField; private var localPort:TextField; private var logField:TextField; private var targetIP:TextField; private var targetPort:TextField; private var message:TextField; public function DatagramSocketExample() { setupUI(); } private function bind( event:Event ):void { if( datagramSocket.bound ) { datagramSocket.close(); datagramSocket = new DatagramSocket(); } datagramSocket.bind( parseInt( localPort.text ), localIP.text ); datagramSocket.addEventListener( DatagramSocketDataEvent.DATA, dataReceived ); datagramSocket.receive(); log( "Bound to: " + datagramSocket.localAddress + ":" + datagramSocket.localPort ); } private function dataReceived( event:DatagramSocketDataEvent ):void { //Read the data from the datagram log("Received from " + event.srcAddress + ":" + event.srcPort + "> " + event.data.readUTFBytes( event.data.bytesAvailable ) ); } private function send( event:Event ):void { //Create a message in a ByteArray var data:ByteArray = new ByteArray(); data.writeUTFBytes( message.text ); //Send a datagram to the target try { datagramSocket.send( data, 0, 0, targetIP.text, parseInt( targetPort.text )); log( "Sent message to " + targetIP.text + ":" + targetPort.text ); } catch ( error:Error ) { log( error.message ); } } private function log( text:String ):void { logField.appendText( text + "\n" ); logField.scrollV = logField.maxScrollV; trace( text ); } private function setupUI():void { targetIP = createTextField( 10, 10, "Target IP:", "192.168.0.1" ); targetPort = createTextField( 10, 35, "Target port:", "8989" ); message = createTextField( 10, 60, "Message:", "Lucy can't drink milk." ); localIP = createTextField( 10, 85, "Local IP", "0.0.0.0"); localPort = createTextField( 10, 110, "Local port:", "0" ); createTextButton( 250, 135, "Bind", bind ); createTextButton( 300, 135, "Send", send ); logField = createTextField( 10, 160, "Log:", "", false, 200 ) this.stage.nativeWindow.activate(); } private function createTextField( x:int, y:int, label:String, defaultValue:String = '', editable:Boolean = true, height:int = 20 ):TextField { var labelField:TextField = new TextField(); labelField.text = label; labelField.type = TextFieldType.DYNAMIC; labelField.width = 180; labelField.x = x; labelField.y = y; var input:TextField = new TextField(); input.text = defaultValue; input.type = TextFieldType.INPUT; input.border = editable; input.selectable = editable; input.width = 280; input.height = height; input.x = x + labelField.width; input.y = y; this.addChild( labelField ); this.addChild( input ); return input; } private function createTextButton( x:int, y:int, label:String, clickHandler:Function ):TextField { var button:TextField = new TextField(); button.htmlText = "<u><b>" + label + "</b></u>"; button.type = TextFieldType.DYNAMIC; button.selectable = false; button.width = 180; button.x = x; button.y = y; button.addEventListener( MouseEvent.CLICK, clickHandler ); this.addChild( button ); return button; } } }
Tue Jun 12 2018, 10:34 AM Z