套件 | flash.net |
類別 | public class XMLSocket |
繼承 | XMLSocket EventDispatcher Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
- XML 訊息是透過全雙工的 TCP/IP 串流 Socket 連線來傳送。
- 每一個 XML 訊息都是完整的 XML 文件,以零 (0) 位元組作為結尾。
- 透過單一的 XMLSocket 連線,可傳送及接收無限多個 XML 訊息。
設定伺服器與 XMLSocket 物件通訊可能會很困難。 如果應用程式不需要即時的互動性,請使用 URLLoader 類別取代 XMLSocket 類別。
若要使用 XMLSocket 類別的方法,請先使用建構函式 new XMLSocket
建立 XMLSocket 物件。
位於具有檔案系統的本機安全執行程序中的 SWF 檔不可以使用通訊端。
目標主機上的「通訊端原則檔」會指定 SWF 檔可從中建立通訊端連線的主機,以及這些連線的目標連接埠。有關通訊端原則檔的安全性需求在最新的幾個 Flash Player 版本中已經變得更加嚴謹。Adobe 建議在所有的 Flash Player 版本中使用通訊端原則檔;在某些情況下,通訊端原則檔是必要的。因此,如果您使用 XMLSocket 物件,請確定目標主機會視需要提供通訊端原則檔。
下列清單摘要說明不同 Flash Player 版本中的通訊端原則檔需求:
- 在 Flash Player 9.0.124.0 和更新版本中,任何 XMLSocket 連線都會需要通訊端原則檔。也就是說,不論您要連線至哪個連接埠,目標主機上都需要有通訊端原則檔,即使連線至提供 SWF 檔之相同主機上的連接埠,通訊端原則檔也是必要的項目。
- 在 Flash Player 9.0.115.0 版和舊版中,如果您要連線至低於 1024 的連接埠號,或是如果您要連線至 SWF 檔提供主機以外的主機,目標主機上就需要有通訊端原則檔。
- 在 Flash Player 9.0.115.0 中,即使不需要通訊端原則檔,但若目標主機未提供通訊端原則檔,當使用 Flash Player 除錯版時會顯示警告。
但在 Adobe AIR 中,application
安全執行程序中的內容 (使用 AIR 應用程式所安裝的內容) 沒有這些安全性限制。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
connected : Boolean [唯讀]
指出此 XMLSocket 物件目前是否已連線。 | XMLSocket | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
timeout : int
指出等待連線的毫秒數。 | XMLSocket |
方法 | 定義自 | ||
---|---|---|---|
建立新的 XMLSocket 物件。 | XMLSocket | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。 | EventDispatcher | ||
會關閉 XMLSocket 物件所指定的連線。 | XMLSocket | ||
會使用指定的 TCP 連接埠,連線到指定的網際網路主機。 | XMLSocket | ||
會將事件傳送到事件流程。 | EventDispatcher | ||
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 | EventDispatcher | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
會從 EventDispatcher 物件移除偵聽程式。 | EventDispatcher | ||
將 object 參數中所指定的 XML 物件或資料轉換成字串,並在後面加上零 (0) 位元組後傳輸到伺服器。 | XMLSocket | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
事件 | 摘要 | 定義自 | ||
---|---|---|---|---|
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。 | EventDispatcher | |||
會在伺服器關閉通訊端連線時傳送。 | XMLSocket | |||
在順利呼叫 XMLSocket.connect() 方法之後傳送。 | XMLSocket | |||
在傳送或收到原始資料之後傳送。 | XMLSocket | |||
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。 | EventDispatcher | |||
發生輸入/輸出錯誤,因而導致傳送或接收作業失敗時傳送。 | XMLSocket | |||
當 XMLSocket.connect() 方法的呼叫嘗試連線至呼叫者安全執行程序以外的伺服器,或小於 1024 的連接埠時傳送。 | XMLSocket |
connected | 屬性 |
timeout | 屬性 |
XMLSocket | () | 建構函式 |
public function XMLSocket(host:String = null, port:int = 0)
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
建立新的 XMLSocket 物件。 如果沒有指定任何參數,就會建立最初中斷連線的通訊端。 如果有指定參數,就會嘗試連線至指定的主機和連接埠。
注意:強烈建議使用「不含參數」的建構函式形式,接著加入任何事件偵聽程式,最後再搭配 host
和 port
參數呼叫 connect
方法。這個序列會保證所有事件偵聽程式都會正常運作。
host:String (default = null ) — 完整的 DNS 網域名稱,或是格式為 .222.333.444 的 IP 位址。在 Flash Player 9.0.115.0 和 AIR 1.0 (和更新版本) 中,您可以指定 IPv6 位址,例如 rtmp://[2001:db8:ccc3:ffff:0:444d:555e:666f]。您也可以指定 null ,以連線到 SWF 檔所在的主機伺服器。如果發出這個呼叫的 SWF 檔正要在某個網頁瀏覽器中執行,則 host 就必須與該 SWF 檔位於相同的網域中。
| |
port:int (default = 0 ) — 目標主機上用來建立連線的 TCP 連接埠號。在 Flash Player 9.0.124.0 和更新版本中,目標主機必須提供通訊端原則檔,以指定允許從提供 SWF 檔之主機至指定連接埠的通訊端連線。在舊版 Flash Player 中,只有在連線至低於 1024 的連接埠號,或是要連線至 SWF 檔提供主機以外的主機時,才需要通訊端原則檔。
|
相關 API 元素
close | () | 方法 |
connect | () | 方法 |
public function connect(host:String, port:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會使用指定的 TCP 連接埠,連線到指定的網際網路主機。
如果您將 host
參數指定為 null
,聯繫的主機便是呼叫 XMLSocket.connect()
的檔案所在的電腦。例如,若發出呼叫的檔案是從 www.adobe.com 下載,則 host 參數指定為 null
表示您要連線至 www.adobe.com。
如果您希望防止任何檔案使用此方法,可以在包含 SWF 內容的 HTML 頁面中,設定 object
和 embed
標籤的 allowNetworking
參數。
如需詳細資訊,請參閱「Flash Player 開發人員中心」主題:「安全性」。
參數
host:String — 完整的 DNS 網域名稱,或是格式為 111.222.333.444 的 IP 位址。您也可以指定 null ,以連線到 SWF 檔所在的主機伺服器。如果發出呼叫的檔案是在網頁瀏覽器中執行的 SWF 檔,則 host 必須與該檔案位於相同的網域。
| |
port:int — 目標主機上用來建立連線的 TCP 連接埠號。在 Flash Player 9.0.124.0 和更新版本中,目標主機必須提供通訊端原則檔,以指定允許從提供 SWF 檔之主機至指定連接埠的通訊端連線。在舊版 Flash Player 中,只有在連線至低於 1024 的連接埠號,或是要連線至 SWF 檔提供主機以外的主機時,才需要通訊端原則檔。
|
事件
securityError: — 連線作業嘗試連線至呼叫者安全執行程序以外的主機,或需要通訊端原則檔的連接埠。在目標主機上使用通訊端原則檔,即可解決這兩個問題。
| |
data: — 在已經收到原始資料時傳送。
| |
connect: — 在已建立網路連線時傳送。
|
擲回值
SecurityError — 本機不受信任的 檔可能無法與網際網路進行通訊。 藉由將檔案重新分類為「具有網路連線的本機」或受信任,即可解決此限制。
| |
SecurityError — 您無法指定大於 65535 的通訊端連接埠。
|
相關 API 元素
send | () | 方法 |
public function send(object:*):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
將 object
參數中所指定的 XML 物件或資料轉換成字串,並在後面加上零 (0) 位元組後傳輸到伺服器。 如果 object
是 XML 物件,這個字串就是此 XML 物件的 XML 文字表示。 傳送作業並不是同步的。它雖然會立即傳回,但是可能要稍後才會傳輸資料。 XMLSocket.send()
方法並不會傳回值來表示資料是否已傳輸成功。
如果您並未使用 XMLSocket.connect()
,將 XMLSocket 物件連線至伺服器,XMLSocket.send()
作業就會失敗。
參數
object:* — 要傳輸至伺服器的 XML 物件或其他資料。
|
擲回值
IOError — XMLSocket 物件未連線至伺服器。
|
相關 API 元素
close | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.CLOSE
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會在伺服器關閉通訊端連線時傳送。 只有當伺服器關閉連線時,才會傳送 close
事件。當您呼叫 XMLSocket.close()
方法時,則不會傳送此事件。
Event.CLOSE
常數會定義 close
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 其連線已關閉的物件。 |
connect | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.CONNECT
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會在順利呼叫 XMLSocket.connect()
方法之後傳送。
Event.CONNECT
常數會定義 connect
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 已建立網路連線的 Socket 或 XMLSocket 物件。 |
data | 事件 |
flash.events.DataEvent
屬性 DataEvent.type =
flash.events.DataEvent.DATA
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
在傳送或收到原始資料之後傳送。
定義type
屬性值 (data
事件物件)。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
data | 已載入 Flash Player 或 Adobe AIR 的原始資料。 |
target | 接收資料的 XMLSocket 物件。 |
ioError | 事件 |
flash.events.IOErrorEvent
屬性 IOErrorEvent.type =
flash.events.IOErrorEvent.IO_ERROR
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
發生輸入/輸出錯誤,因而導致傳送或接收作業失敗時傳送。
定義ioError
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
errorID | 與特定錯誤相關聯的參考號碼 (僅限 AIR)。 |
target | 遭遇輸入/輸出錯誤的網路物件。 |
text | 要顯示為錯誤訊息的文字。 |
securityError | 事件 |
flash.events.SecurityErrorEvent
屬性 SecurityErrorEvent.type =
flash.events.SecurityErrorEvent.SECURITY_ERROR
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會當 XMLSocket.connect()
方法的呼叫嘗試連線至呼叫者安全執行程序以外的伺服器,或小於 1024 的連接埠時傳送。
SecurityErrorEvent.SECURITY_ERROR
常數會定義 securityError
事件物件的 type
屬性值。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 回報安全性錯誤的網路物件。 |
text | 要顯示為錯誤訊息的文字。 |
相關 API 元素
- XMLSocketExample 建構函式會建立 XMLSocket 實體
socket
,將socket
傳遞給ConfigureListeners()
(將在下列範例中說明),然後使用主機名稱 "localhost" 與8080
的埠號,呼叫 XMLSocket 的connect()
方法。 - 接著呼叫
configureListeners()
方法,將偵聽程式加入每一個支援的 XMLSocket 事件:closeHandler()
會偵聽close
事件,並在網路連線中斷後將事件送出。connectHandler()
會偵聽connect
事件,並在建立網路連線後將事件送出。dataHandler()
會偵聽data
事件,並在每次 XMLSocket 收到新的資料後將事件送出。progressHandler()
會偵聽progress
事件,並在呼叫send()
後及傳送作業進行時將事件送出。securityErrorHandler()
會偵聽securityError
事件,並在嘗試使用錯誤的本機播放安全性設定或小於 1024 的埠號存取 XMLSocket 時將事件送出。ioErrorHandler()
會偵聽ioError
事件,並只在傳送或接收資料失敗時將事件送出。
注意:
- 在編譯 SWF 檔時,您必須將「本機播放安全性」設定為「只存取網路」。
- 若要讓此範例正確運作,您需要能在網域上使用連接埠 8080 的伺服器。
- 如果您執行 Flash Player 9.0.124.0 或更新版本,則必須在伺服器上放置通訊端原則檔,以允許從您的網域至連接埠 8080 的通訊端連線。如需有關提供通訊端原則檔的詳細資訊,請參閱 Flash Player 開發人員中心主題:「設定通訊端原則檔伺服器」。
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); if (hostName && port) { 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); } } }
Tue Jun 12 2018, 03:47 PM Z