| 包 | flash.net |
| 类 | public class XMLSocket |
| 继承 | XMLSocket EventDispatcher Object |
| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
将服务器设置为与 XMLSocket 对象进行通信可能会遇到一些困难。如果您的应用程序不需要进行实时交互,请使用 URLLoader 类,而不要使用 XMLSocket 类。
若要使用 XMLSocket 类的方法,请先使用构造函数 new XMLSocket 创建一个 XMLSocket 对象。
只能与本地文件系统内容交互的沙箱中的 SWF 文件无法使用套接字。
目标主机上的套接字策略文件 指定 SWF 文件可从中建立套接字连接的主机,并指定可以建立这些连接的端口。在新近发布的几个版本的 Flash Player 中,有关套接字策略文件的安全要求变得更加严格。对于所有版本的 Flash Player,Adobe 建议使用套接字策略文件;在某些情况下,必须使用套接字策略文件。因此,如果使用的是 XMLSocket 对象,必要时请确保目标主机提供了套接字策略文件。
以下列表汇总了各个版本的 Flash Player 中针对套接字策略文件的要求:
但在 Adobe AIR 中,application 安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。
有关安全性的详细信息,请参阅以下部分:
另请参见
| 属性 | 定义方 | ||
|---|---|---|---|
| connected : Boolean [只读 (read-only)] 指示此 XMLSocket 对象目前是否已连接。 | XMLSocket | ||
![]() | constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | |
![]() | prototype : 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 | |
![]() | 检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher | |
| 事件 | 摘要 | 定义方 | ||
|---|---|---|---|---|
![]() | [广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | ||
| 在服务器关闭套接字连接时调度。 | XMLSocket | |||
| 在成功调用 XMLSocket.connect() 方法后调度。 | XMLSocket | |||
| 在发送或接收原始数据后调度。 | XMLSocket | |||
![]() | [广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | ||
| 在出现输入/输出错误并导致发送或接收操作失败时调度。 | XMLSocket | |||
| 若对 XMLSocket.connect() 方法的调用尝试连接到调用方安全沙箱外部的服务器或低于 1024 的端口,则进行调度。 | XMLSocket | |||
| connected | 属性 |
connected:Boolean [只读 (read-only)] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
指示此 XMLSocket 对象目前是否已连接。还可以通过为 connect 事件和 ioError 事件注册来检查连接是否成功。
public function get connected():Boolean另请参见
| timeout | 属性 |
timeout:int [读写] | 语言版本: | ActionScript 3.0 |
| 运行时版本: | Flash Player 10, AIR 1.5 |
指示建立连接时需等待的毫秒数。
如果在指定时间内未成功建立连接,则连接失败。默认值是 20,000(20 秒)。
public function get timeout():int public function set timeout(value:int):void| XMLSocket | () | 构造函数 |
public function XMLSocket(host:String = null, port:int = 0)| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
创建一个新的 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 文件的主机之外的主机时,才需要使用套接字策略文件。 |
另请参见
| close | () | 方法 |
public function close():void| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
关闭由 XMLSocket 对象指定的连接。仅在服务器关闭连接时调度 close 事件;在调用 close() 方法时不调度该事件。
另请参见
| connect | () | 方法 |
public function connect(host:String, port:int):void| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
使用指定的 TCP 端口建立到指定 Internet 主机的连接。
如果为 host 参数指定 null,则与调用 XMLSocket.connect() 的 文件所在的主机连接。例如,如果进行调用的文件是从 www.adobe.com 下载的,则将 host 参数指定为 null 表示您将连接到 www.adobe.com。
可以在包含 内容的 HTML 页中设置 object 和 embed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。
有关详细信息,请参阅以下部分:
参数
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 的套接字端口。 |
另请参见
| send | () | 方法 |
public function send(object:*):void| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
将 object 参数中指定的 XML 对象或数据转换成字符串,并将其传输到服务器,后面跟有一个零 (0) 字节。如果 object 是一个 XML 对象,则该字符串是此 XML 对象的 XML 文本表示形式。发送操作是异步的;它将立即返回,但数据可能会以后传输。XMLSocket.send() 方法不返回指示数据是否成功传输的值。
如果不是使用 XMLSocket.connect() 将 XMLSocket 对象连接到服务器,则 XMLSocket.send() 操作失败。
参数
object:* — 一个要传输到服务器的 XML 对象或其它数据。 |
IOError — XMLSocket 对象未与服务器连接。 |
另请参见
| close | 事件 |
flash.events.Eventflash.events.Event.CLOSE| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
在服务器关闭套接字连接时调度。仅在服务器关闭连接时调度 close 事件;在调用 XMLSocket.close() 方法时不调度该事件。
Event.CLOSE 常量定义 close 事件对象的 type 属性的值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles
|
false
|
cancelable
|
false;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 已关闭其连接的对象。 |
| connect | 事件 |
flash.events.Eventflash.events.Event.CONNECT| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
在成功调用 XMLSocket.connect() 方法后调度。
Event.CONNECT 常量定义 connect 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles
|
false
|
cancelable
|
false;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 已建立网络连接的 Socket 或 XMLSocket 对象。 |
| data | 事件 |
flash.events.DataEventflash.events.DataEvent.DATA| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
在发送或接收原始数据后调度。
定义data 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles
|
false
|
cancelable
|
false;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
data
| 加载到 Flash Player 或 Adobe AIR 中的原始数据。 |
target
| 接收数据的 XMLSocket 对象。 |
| ioError | 事件 |
flash.events.IOErrorEventflash.events.IOErrorEvent.IO_ERROR| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
在出现输入/输出错误并导致发送或接收操作失败时调度。
定义ioError 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles
|
false
|
cancelable
|
false;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
errorID
| 与特定错误关联的引用编号(仅限 AIR)。 |
target
| 发生输入/输出错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
| securityError | 事件 |
flash.events.SecurityErrorEventflash.events.SecurityErrorEvent.SECURITY_ERROR| 语言版本: | ActionScript 3.0 |
| 运行时版本: | AIR 1.0 Flash Player 9 |
若对 XMLSocket.connect() 方法的调用尝试连接到调用方安全沙箱外部的服务器或低于 1024 的端口,则进行调度。
SecurityErrorEvent.SECURITY_ERROR 常量定义 securityError 事件对象的 type 属性值。
此事件具有以下属性:
| 属性 | 值 |
|---|---|
bubbles
|
false
|
cancelable
|
false;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 报告安全错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
另请参见
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 事件,仅当发送或接收数据的操作失败时,才会发生该事件。
注意:
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);
}
}
}