パッケージflash.net
public class XMLSocket
継承XMLSocket Inheritance EventDispatcher Inheritance Object

XMLSocket クラスはクライアントソケットを実装しており、Flash Player を実行するコンピュータはこのソケットを使用して、IP アドレスまたはドメイン名で識別されるサーバーコンピュータと通信することができます。XMLSocket クラスは、リアルタイムのチャットシステムなど待ち時間を短くすることが求められるクライアント/サーバーアプリケーションに適しています。従来の HTTP ベースチャットソリューションは頻繁にサーバーをポーリングし、HTTP 要求を使用して新しいメッセージをダウンロードします。それに対して、XMLSocket チャットソリューションはサーバーに対して開いた接続を維持するため、サーバーはクライアントから要求を受けずにただちに着信メッセージを送ることができます。XMLSocket クラスを使用するには、サーバーコンピュータは XMLSocket クラスで使用されるプロトコルに対応したデーモンを実行する必要があります。プロトコルの説明を次の一覧に示します。

XMLSocket.connect() メソッドが接続できる TCP ポートの番号は、1024 以上です。この制限により、XMLSocket オブジェクトと通信するサーバーデーモンにも、1024 以上のポート番号を割り当てる必要があります。1024 未満のポート番号は、FTP、Telnet、HTTP などのシステムサービスによって使用されることが多いため、XMLSocket オブジェクトはセキュリティ上の理由からこれらのポートにアクセスできません。ポート番号の制限により、これらのリソースが不適切にアクセスおよび乱用される可能性が少なくなります。

XMLSocket オブジェクトと通信するようにサーバーを設定すると、問題が発生する可能性があります。アプリケーションがリアルタイムのインタラクティブ機能を必要としない場合は、XMLSocket クラスの代わりに、URLLoader クラスを使用します。XMLSocket クラスのメソッドを使用するには、まず new XMLSocket コンストラクタを使用して XMLSocket オブジェクトを作成する必要があります。

このクラスを使用するときは、Flash Player セキュリティモデルを考慮してください。

詳細については、次のトピックを参照してください。

例の表示

関連項目

flash.net.URLLoader.load()
flash.net.URLLoader
ソケット接続


パブリックプロパティ
 プロパティ定義
  connected : Boolean
[read-only] この XMLSocket オブジェクトが現在、接続されているかどうかを示します。
XMLSocket
 Inheritedconstructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
 Inheritedprototype : Object
[static] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
パブリックメソッド
 メソッド定義
  XMLSocket(host:String = null, port:int = 0)
新しい XMLSocket オブジェクトを作成します。
XMLSocket
 InheritedaddEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。
EventDispatcher
  close():void
XMLSocket オブジェクトで指定された接続を閉じます。
XMLSocket
  connect(host:String, port:int):void
指定された TCP ポートを使用して指定されたインターネットホストへの接続を確立します。
XMLSocket
 InheriteddispatchEvent(event:Event):Boolean
イベントをイベントフローに送出します。
EventDispatcher
 InheritedhasEventListener(type:String):Boolean
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
EventDispatcher
 InheritedhasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 InheritedisPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 InheritedpropertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
Object
 InheritedremoveEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
EventDispatcher
  send(object:*):void
object パラメータで指定された XML オブジェクトまたはデータをストリングに変換し、その後ろにゼロ (0) バイトを付加してサーバーに転送します。
XMLSocket
 InheritedsetPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
 InheritedtoString():String
指定されたオブジェクトのストリング表現を返します。
Object
 InheritedvalueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
Object
 InheritedwillTrigger(type:String):Boolean
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
EventDispatcher
イベント
 イベント一覧定義
  close サーバーによりソケット接続が閉じられたときに送出されます。XMLSocket
  connect XMLSocket.connect() メソッドの呼び出しが成功した後に送出されます。XMLSocket
  data 未処理のデータが送受信された後に送出されます。XMLSocket
  ioError 入出力エラーが発生して送信または受信操作が失敗したときに送出されます。XMLSocket
  securityError XMLSocket.connect() メソッドの呼び出しによって、呼び出し元のセキュリティサンドボックスの外にあるサーバーや 1024 未満のポート番号に対して接続しようとしたときに送出されます。XMLSocket
プロパティの詳細
connectedプロパティ
connected:Boolean  [read-only]

この XMLSocket オブジェクトが現在、接続されているかどうかを示します。connect イベントと ioError イベントに対して登録を行い、接続が成功したかどうかを調べることもできます。

実装
    public function get connected():Boolean

関連項目

コンストラクタの詳細
XMLSocket()コンストラクタ
public 関数 XMLSocket(host:String = null, port:int = 0)

新しい XMLSocket オブジェクトを作成します。初期状態では、XMLSocket オブジェクトはサーバーに接続されません。オブジェクトをサーバーに接続するには、XMLSocket.connect() メソッドを呼び出す必要があります。

パラメータ
host:String (default = null) — FQDN (完全修飾ドメイン名)、つまり aaa.bbb.ccc.ddd という形式の IP アドレスです。null を指定して、SWF ファイルが存在するホストサーバーに接続することもできます。呼び出し元の SWF ファイルが Web ブラウザ内で実行されている場合は、host が SWF ファイルと同じドメイン内に存在する必要があります。
 
port:int (default = 0) — 接続の確立に使用するホスト上の TCP ポート番号です。ポリシーファイルを使用している場合を除き、ポート番号は 1024 以上である必要があります。

関連項目

メソッドの詳細
close()メソッド
public function close():void

XMLSocket オブジェクトで指定された接続を閉じます。close イベントは、サーバーにより接続が閉じられたときのみ送出されます。close() メソッドを呼び出しても送出されません。

関連項目

connect()メソッド 
public function connect(host:String, port:int):void

指定された TCP ポートを使用して指定されたインターネットホストへの接続を確立します。デフォルトでは、ポリシーファイルを使用していない限り、番号が 1024 以上のポートにのみ接続できます。

XMLSocket.connected プロパティが true の場合、接続プロセスの初期段階は成功しています。XMLSocket.connected プロパティが false の場合、接続に失敗しています。

host パラメータに対して null を指定した場合は、XMLSocket.connect() を呼び出す SWF ファイルが存在するホストに接続します。たとえば、www.adobe.com から SWF ファイルをダウンロードし、host パラメータに null を指定した場合は、www.adobe.com の IP アドレスを入力した場合と同じ結果となります。

Flash Player 7 より前のバージョンの Player で SWF ファイルを実行している場合、host は、呼び出し元の SWF ファイルと同じスーパードメインに属している必要があります。たとえば、www.adobe.com に置かれた SWF ファイルからは、store.adobe.com にある SWF ファイルに対して変数の送受信を行えます。これは、どちらのファイルも adobe.com という同一のスーパードメインに属するためです。

Flash Player 7 以降で SWF ファイルを実行している場合、host は正確に同じドメインに置かれている必要があります。たとえば、www.adobe.com にある SWF ファイルが Flash Player 5 用にパブリッシュされているにもかかわらず、Flash Player 7 以降で実行されている場合は、このファイルは同様に www.adobe.com に置かれている SWF ファイルに対してのみ、変数の送受信を行えます。別のドメインに対して変数の送受信を行うには、アクセスする SWF ファイルをホストするサーバー上に、クロスドメインポリシーファイルを配置します。

デフォルトでは、host に渡す値は同じドメインに置かれている必要があり、port に渡す値は 1024 以上である必要があります。たとえば、www.adobe.com に置かれている SWF ファイルは、www.adobe.com に存在する SWF ファイルからしか変数を送受信できません。接続している SWF ファイルが置かれているホストとは異なるホスト上にあるソケットに接続する場合、または任意のホストでポート番号が 1024 より小さいポートに接続する場合は、接続するホストから xmlsocket: ポリシーファイルを取得する必要があります。詳細については、『ActionScript 3.0 のプログラミング』の「Flash Player セキュリティ」の章を参照してください。

パラメータ
host:String — FQDN (完全修飾ドメイン名)、つまり aaa.bbb.ccc.ddd という形式の IP アドレスです。null を指定して、SWF ファイルが存在するホストサーバーに接続することもできます。呼び出し元の SWF ファイルが Web ブラウザ内で実行されている場合は、host が SWF ファイルと同じドメイン内に存在する必要があります。
 
port:int — 接続の確立に使用するホスト上の TCP ポート番号です。ポリシーファイルを使用している場合を除き、ポート番号は 1024 以上である必要があります。

イベント
securityError:SecurityErrorEvent — 呼び出し元のセキュリティサンドボックス外のサーバーまたは 1024 より小さいポートに接続しようとした接続操作です。どちらの問題も、サーバーで XMLSocket ポリシーファイルを使用することで回避できます。
 
data:DataEvent — 未処理のデータを受信したときに送出されます。
 
connect:Event — ネットワーク接続が確立されたときに送出されます。

スロー
SecurityError — 信頼されていないローカル SWF はインターネットへの接続を許可されません。これは、ネットワークアクセスを許可されたローカル SWF ファイル、または信頼できる SWF ファイルとして再分類すると回避できる場合があります。
 
SecurityError — 65535 より大きいソケットポートを指定することはできません。

関連項目

send()メソッド 
public function send(object:*):void

object パラメータで指定された XML オブジェクトまたはデータをストリングに変換し、その後ろにゼロ (0) バイトを付加してサーバーに転送します。object が XML オブジェクトである場合、ストリングは XML オブジェクトの XML テキスト表現です。送信操作は非同期です。つまり、転送処理はただちに終了しますが、データが転送されるのは、その後です。XMLSocket.send() メソッドは、データが正常に転送されたかどうかを示す値を返しません。

XMLSocket.connect() を使用して、XMLSocket オブジェクトをサーバーに接続していない場合、XMLSocket.send() 操作は失敗します。

パラメータ
object:* — サーバーに転送する XML オブジェクトまたは他のデータです。

スロー
IOError — XMLSocket オブジェクトはサーバーに接続されません。

関連項目

イベントの詳細
closeevent 
イベントオブジェクトの型: flash.events.Event
Event.type property = flash.events.Event.CLOSE

サーバーによりソケット接続が閉じられたときに送出されます。close イベントは、サーバーにより接続が閉じられたときのみ送出されます。XMLSocket.close() メソッドを呼び出しても送出されません。

close イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
target接続が閉じられたオブジェクトです。
connectevent  
イベントオブジェクトの型: flash.events.Event
Event.type property = flash.events.Event.CONNECT

XMLSocket.connect() メソッドの呼び出しが成功した後に送出されます。

connect イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
targetネットワーク接続を確立した Socket オブジェクトまたは XMLSocket オブジェクトです。
dataevent  
イベントオブジェクトの型: flash.events.DataEvent
DataEvent.type property = flash.events.DataEvent.DATA

未処理のデータが送受信された後に送出されます。

data イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
dataFlash Player にロードされる未処理のデータです。
targetデータを受け取る XMLSocket オブジェクトです。
ioErrorevent  
イベントオブジェクトの型: flash.events.IOErrorEvent
IOErrorEvent.type property = flash.events.IOErrorEvent.IO_ERROR

入出力エラーが発生して送信または受信操作が失敗したときに送出されます。

ioError イベントオブジェクトの type プロパティの値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
target入出力エラーが発生したネットワークオブジェクトです。
textエラーメッセージとして表示されるテキストです。
securityErrorevent  
イベントオブジェクトの型: flash.events.SecurityErrorEvent
SecurityErrorEvent.type property = flash.events.SecurityErrorEvent.SECURITY_ERROR

XMLSocket.connect() メソッドの呼び出しによって、呼び出し元のセキュリティサンドボックスの外にあるサーバーや 1024 未満のポート番号に対して接続しようとしたときに送出されます。

SecurityErrorEvent.SECURITY_ERROR 定数は、securityError イベントオブジェクトの type プロパティ値を定義します。

このイベントには、次のプロパティがあります。

プロパティ
bubblesfalse
cancelablefalse は、キャンセルするデフォルトの動作がないことを示します。
currentTargetイベントリスナーで Event オブジェクトをアクティブに処理しているオブジェクトです。
targetセキュリティエラーを報告するネットワークオブジェクトです。
textエラーメッセージとして表示されるテキストです。

関連項目


次の例では、クラス XMLSocketExample を使用して、 XMLSocket でデータを送信し、XMLSocket イベント時に情報をプリントします。ここでは次の手順を 実行します。
  1. XMLSocketExample コンストラクタは socket という XMLSocket インスタンスを作成し、 次に示す ConfigureListeners()socket を渡し、 XMLSocket の connect() メソッドを、ホスト名 "localhost" とポート 番号 8080.
  2. を使用して呼び出します。
  3. 次に、configureListeners() メソッドを呼び出して、 サポートされる各 XMLSocket イベントにリスナーを追加します。
    • closeHandler()close イベントをリッスンします。このイベントは ネットワーク接続が閉じられた後に送出されます。
    • connectHandler()connect イベントをリッスンします。このイベントは ネットワーク接続が確立されたときに送出されます。
    • dataHandler()data イベントをリッスンします。このイベントは XMLSocket が新しいデータを受け取るたびに送出されます。
    • progressHandler()progress イベントをリッスンします。このイベントは send() が呼び出されたとき、送信中に送出されます。
    • securityErrorHandler()securityError イベントをリッスンします。このイベントは 誤ったローカルでの再生に関するセキュリティ設定または 1024 より小さいポートを使用して、XMLSocket にアクセスしようとしたときに 送出されます。
    • ioErrorHandler()ioError イベントをリッスンします。このイベントは データの送信または受信操作に失敗すると発生します。

メモ :


package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.net.XMLSocket;

    public class XMLSocketExample extends Sprite {
        private var hostName:String = "localhost";
        private var port:uint = 8080;
        private var socket:XMLSocket;

        public function XMLSocketExample() {
            socket = new XMLSocket();
            configureListeners(socket);
            socket.connect(hostName, port);
        }

        public function send(data:Object):void {
            socket.send(data);
        }

        private function configureListeners(dispatcher:IEventDispatcher):void {
            dispatcher.addEventListener(Event.CLOSE, closeHandler);
            dispatcher.addEventListener(Event.CONNECT, connectHandler);
            dispatcher.addEventListener(DataEvent.DATA, dataHandler);
            dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
        }

        private function closeHandler(event:Event):void {
            trace("closeHandler: " + event);
        }

        private function connectHandler(event:Event):void {
            trace("connectHandler: " + event);
        }

        private function dataHandler(event:DataEvent):void {
            trace("dataHandler: " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioErrorHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
        }

        private function securityErrorHandler(event:SecurityErrorEvent):void {
            trace("securityErrorHandler: " + event);
        }
    }
}