套件flash.net
類別public class XMLSocket
繼承XMLSocket Inheritance EventDispatcher Inheritance Object

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

XMLSocket 類別會實作用戶端通訊端,讓正在執行 Flash Player 的電腦能與伺服器電腦 (可透過 IP 位址或網域名稱加以識別) 進行通訊。 對於需要較短等待時間的主從式應用程式 (例如即時線上交談系統) 來說,XMLSocket 類別很有用。 傳統以 HTTP 為基礎的線上交談解決方案都需要經常輪詢伺服器,並使用 HTTP 要求下載新的訊息。 相反地,XMLSocket 線上交談解決方案會與伺服器維持開啟的連線,讓伺服器能立即傳送收到的訊息,不需等待用戶端的要求。 若要使用 XMLSocket 類別,伺服器電腦必須執行一個常駐程式,才能了解 XMLSocket 類別所使用的通訊協定。 通訊協定說明如下:

XMLSocket.connect() 方法只能連接到埠號大於或等於 1024 的 TCP 連接埠。 這項限制的其中一個影響就是,與 XMLSocket 物件連線的伺服器常駐程式也必須指定給埠號大於或等於 1024 的連接埠。 埠號在 1024 以下的連接埠通常是供系統服務使用,例如 FTP、Telnet 和 HTTP,因此基於安全上的考量,禁止 XMLSocket 物件使用這些連接埠。 限制連接埠號可防止有人不當存取及濫用這些資源。

設定伺服器與 XMLSocket 物件通訊可能會很困難。 如果應用程式不需要即時的互動性,請使用 URLLoader 類別取代 XMLSocket 類別。 若要使用 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
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式¡以便讓偵聽程式收到事件的通知。
EventDispatcher
  
會關閉 XMLSocket 物件所指定的連線。
XMLSocket
  
connect(host:String, port:int):void
會使用指定的 TCP 連接埠,連線到指定的網際網路主機。
XMLSocket
 Inherited
會將事件傳送到事件流程。
EventDispatcher
 Inherited
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。
EventDispatcher
 Inherited
指出物件是否有已定義的指定屬性。
Object
 Inherited
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
Object
 Inherited
指出指定的屬性是否存在,以及是否可列舉。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
會從 EventDispatcher 物件移除偵聽程式。
EventDispatcher
  
send(object:*):void
將 object 參數中所指定的 XML 物件或資料轉換成字串,並在後面加上零 (0) 位元組後傳輸到伺服器。
XMLSocket
 Inherited
為迴圈作業設定動態屬性的可用性。
Object
 Inherited
會傳回指定之物件的字串形式。
Object
 Inherited
會傳回指定之物件的基本值。
Object
 Inherited
檢查此 EventDispatcher 物件是否已註冊為事件偵聽程式,或者此物件的任何祖先已註冊為特定的事件類型。
EventDispatcher
事件
 事件 摘要 定義自
 Inherited 當 Flash Player 取得作業系統焦點並成為作用中狀態時傳送。EventDispatcher
   會在伺服器關閉通訊端連線時傳送。XMLSocket
   在順利呼叫 XMLSocket.connect() 方法之後傳送。XMLSocket
   在傳送或收到原始資料之後傳送。XMLSocket
 Inherited 當 Flash Player 失去作業系統焦點並成為停用狀態時傳送。EventDispatcher
   發生輸入/輸出錯誤,因而導致傳送或接收作業失敗時傳送。XMLSocket
   當 XMLSocket.connect() 方法的呼叫嘗試連線至呼叫者安全執行程序以外的伺服器,或小於 1024 的連接埠時傳送。XMLSocket
屬性詳細資訊
connected屬性
connected:Boolean  [read-only]

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

指出此 XMLSocket 物件目前是否已連線。 您也可以透過註冊 connect 事件和 ioError 事件,檢查連線是否成功。


實作
    public function get connected():Boolean

請參閱

建構函式詳細資訊
XMLSocket()建構函式
public function XMLSocket(host:String = null, port:int = 0)

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

建立新的 XMLSocket 物件。 XMLSocket 物件在剛開始時並未與任何伺服器連線。 您必須呼叫 XMLSocket.connect() 方法,將物件連線至伺服器。

參數
host:String (default = null) — 完整的 DNS 網域名稱,或是格式為 aaa.bbb.ccc.ddd 的 IP 位址。 您也可以指定 null,以連線到 SWF 檔所在的主機伺服器。 如果發出這個呼叫的 SWF 檔正要在某個網頁瀏覽器中執行,則 host 就必須與該 SWF 檔位於相同的網域中。
 
port:int (default = 0) — 主機上用來建立連線的 TCP 連接埠號。 除非已使用原則檔,否則此連接埠號必須是 1024 (含) 以上。

請參閱

方法詳細資訊
close()方法
public function close():void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會關閉 XMLSocket 物件所指定的連線。 只有當伺服器關閉連線時,才會傳送 close 事件。當您呼叫 close() 方法時,則不會傳送此事件。

請參閱

connect()方法 
public function connect(host:String, port:int):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會使用指定的 TCP 連接埠,連線到指定的網際網路主機。 根據預設,除非您已使用原則檔,否則只能連線至埠號 1024 以上的連接埠。

如果您將 host 參數指定為 null,則聯繫的主機就是呼叫 XMLSocket.connect() 的 SWF 檔所在的機器。 例如,如果您是從 www.adobe.com 下載 SWF 檔,那麼將 host 參數指定為 null 就等於是輸入 www.adobe.com 的 IP 位址。

若 SWF 檔是在早於 Flash Player 7 版本的播放程式中執行,則該 SWF 檔中的 host 必須和發出這個呼叫的 SWF 檔位於相同的父網域中。 例如,位於 www.adobe.com 的 SWF 檔可以從位於 store.adobe.com 的 SWF 檔中傳送或接收變數,因為兩個檔案都位於相同的父網域 (adobe.com) 中。

在 Flash Player 7 或更新版本中執行的任何版本 SWF 檔中,其 host 必須位於完全相同的網域中。 例如,發行為 Flash Player 5 格式、位於 www.adobe.com 網域中、但在 Flash Player 7 或更新版本中執行的 SWF 檔,只能從同樣位於 www.adobe.com 的 SWF 檔傳送或接收變數。 若要傳送或接收來自不同網域的變數,可以在裝載您所要存取之 SWF 檔的伺服器上置入「跨網域原則檔案」

您可以拒絕 SWF 檔使用這個方法,方式是在包含 SWF 內容的 HTML 網頁中,設定 objectembed 標籤的 allowNetworking 參數。

如需詳細資訊,請參閱下列章節:

參數

host:String — 完整的 DNS 網域名稱,或是格式為 aaa.bbb.ccc.ddd 的 IP 位址。 您也可以指定 null,以連線到 SWF 檔所在的主機伺服器。 如果發出這個呼叫的 SWF 檔正要在某個網頁瀏覽器中執行,則 host 就必須與該 SWF 檔位於相同的網域中。
 
port:int — 主機上用來建立連線的 TCP 連接埠號。 除非已使用原則檔,否則此連接埠號必須是 1024 (含) 以上。


事件
securityError:SecurityErrorEvent — 連線作業嘗試連線至呼叫者安全執行程序以外的伺服器,及/或小於 1024 的連接埠。 這兩個問題都可以使用伺服器上的 XMLSocket 原則檔案來解決。
 
data:DataEvent — 在已經收到原始資料時傳送。
 
connect:Event — 在已建立網路連線時傳送。

擲回值
SecurityError — 本機不受信任的 SWF 檔可能無法與網際網路進行通訊。 您可以透過將此 SWF 檔重新分類為「具有網路連線的本機」或受信任,解決此問題。
 
SecurityError — 您無法指定大於 65535 的通訊端連接埠。

請參閱

send()方法 
public function send(object:*):void

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

object 參數中所指定的 XML 物件或資料轉換成字串,並在後面加上零 (0) 位元組後傳輸到伺服器。 如果 object 是 XML 物件,這個字串就是此 XML 物件的 XML 文字表示。 傳送作業並不是同步的。它雖然會立即傳回,但是可能要稍後才會傳輸資料。 XMLSocket.send() 方法並不會傳回值來表示資料是否已傳輸成功。

如果您並未使用 XMLSocket.connect(),將 XMLSocket 物件連線至伺服器,XMLSocket.send() 作業就會失敗。

參數

object:* — 要傳輸至伺服器的 XML 物件或其它資料。


擲回值
IOError — XMLSocket 物件未連線至伺服器。

請參閱

事件詳細資訊
close 事件
事件物件類型: flash.events.Event
Event.type property = flash.events.Event.CLOSE

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會在伺服器關閉通訊端連線時傳送。 只有當伺服器關閉連線時,才會傳送 close 事件。當您呼叫 XMLSocket.close() 方法時,則不會傳送此事件。

定義 close 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target其連線已關閉的物件。
connect 事件  
事件物件類型: flash.events.Event
Event.type property = flash.events.Event.CONNECT

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會在順利呼叫 XMLSocket.connect() 方法之後傳送。

定義 connect 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target已建立網路連線的 Socket 或 XMLSocket 物件。
data 事件  
事件物件類型: flash.events.DataEvent
DataEvent.type property = flash.events.DataEvent.DATA

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

在傳送或收到原始資料之後傳送。

定義 type 屬性值 (data 事件物件)。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
data已載入 Flash Player 的原始資料。
target接收資料的 XMLSocket 物件。
ioError 事件  
事件物件類型: flash.events.IOErrorEvent
IOErrorEvent.type property = flash.events.IOErrorEvent.IO_ERROR

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

發生輸入/輸出錯誤,因而導致傳送或接收作業失敗時傳送。

定義 ioError 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target遭遇輸入/輸出錯誤的網路物件。
text要顯示為錯誤訊息的文字。
securityError 事件  
事件物件類型: flash.events.SecurityErrorEvent
SecurityErrorEvent.type property = flash.events.SecurityErrorEvent.SECURITY_ERROR

語言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

會當 XMLSocket.connect() 方法的呼叫嘗試連線至呼叫者安全執行程序以外的伺服器,或小於 1024 的連接埠時傳送。

SecurityErrorEvent.SECURITY_ERROR 常數會定義 securityError 事件物件的 type 屬性值。

這個事件具有下列屬性:

屬性
bubblesfalse
cancelablefalse;沒有要取消的預設行為指令。
currentTarget以事件偵聽程式主動處理 Event 物件的物件。
target回報安全性錯誤的網路物件。
text要顯示為錯誤訊息的文字。

請參閱

範例 如何使用範例
XMLSocketExample.as

下列範例會使用 XMLSocketExample 類別,透過 XMLSocket 傳送資料,並在 XMLSocket 事件期間列印資訊。 這是透過下列步驟完成:
  1. XMLSocketExample 建構函式會建立 XMLSocket 實體 socket,將 socket 傳遞給 ConfigureListeners() (將在下列範例中說明),然後使用主機名稱 "localhost" 與 8080 的埠號,呼叫 XMLSocket 的 connect() 方法。
  2. 接著呼叫 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);
        }
    }
}




 

有新的意見加入至這個頁面時,傳送電子郵件給我 | 意見報告

目前頁面: http://livedocs.adobe.com/flash/9.0_tw/ActionScriptLangRefV3/flash/net/XMLSocket.html