包 | flash.net |
类 | public class XMLSocket |
继承 | XMLSocket EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
- XML 消息通过全双工 TCP/IP 流套接字连接发送。
- 每个 XML 消息都是一个完整的 XML 文档,以一个零 (0) 字节结束。
- 通过 XMLSocket 连接发送和接收的 XML 消息的数量没有限制。
将服务器设置为与 XMLSocket 对象进行通信可能会遇到一些困难。如果您的应用程序不需要进行实时交互,请使用 URLLoader 类,而不要使用 XMLSocket 类。
要使用 XMLSocket 类的方法,请先使用构造函数 new XMLSocket
创建一个 XMLSocket 对象。
只能与本地文件系统内容交互的沙箱中的 SWF 文件无法使用套接字。
目标主机上的套接字策略文件 指定 SWF 文件可从中建立套接字连接的主机,并指定可以建立这些连接的端口。在新近发布的几个版本的 Flash Player 中,有关套接字策略文件的安全要求变得更加严格。对于所有版本的 Flash Player,Adobe 建议使用套接字策略文件;在某些情况下,必须使用套接字策略文件。因此,如果使用的是 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 Debug 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 端口建立到指定 Internet 主机的连接。 | 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 文件正在 Web 浏览器中运行,则 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 端口建立到指定 Internet 主机的连接。
如果指定 null
为 host
参数,则与调用 XMLSocket.connect()
的文件所在的主机连接。例如,如果进行调用的文件是从 www.adobe.com 下载的,则将 host 参数指定为 null
表示您将连接到 www.adobe.com。
可以在包含 内容的 HTML 页中设置 object
和 embed
标签的 allowNetworking
参数,防止 SWF 文件使用此方法。
有关详细信息,请参阅 Flash Player 开发人员中心主题:安全性。
参数
host:String — 一个完全限定的 DNS 域名,或 111.222.333.444 形式的 IP 地址。也可指定 null 以连接到 SWF 文件所在的主机服务器。如果进行调用的文件是正在 Web 浏览器中运行的 SWF 文件,则 host 必须与该文件位于同一个域中。
| |
port:int — 用于建立连接的目标主机上的 TCP 端口号。在 Flash Player 9.0.124.0 及更高版本中,目标主机必须提供套接字策略文件,以指定允许建立从提供 SWF 文件的主机到指定端口的套接字连接。在早期版本的 Flash Player 中,仅在要连接到小于 1024 的端口号或连接到除提供 SWF 文件的主机之外的主机时,才需要使用套接字策略文件。
|
事件
securityError: — 连接操作试图连接到调用方的安全沙箱外部的主机,或试图连接到需要套接字策略文件的端口。可以通过在目标主机上使用套接字策略文件来解决上述任何一个问题。
| |
data: — 在收到原始数据时调度。
| |
connect: — 在建立网络连接后调度。
|
引发
SecurityError — 本地不受信任的 文件可能无法与 Internet 进行通信。可以通过将此文件重新分类为只能与远程内容交互的文件或受信任的文件来突破此限制。
| |
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 |
在发送或接收原始数据后调度。
定义data
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
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 构造函数创建名为
socket
的 XMLSocket 实例,并将socket
传递给ConfigureListeners()
(如下所述),然后使用主机名“localhost”和端口号8080
调用connect()
XMLSocket 的方法。 - 随后调用
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, 11:04 AM Z