flash.net
public class XMLSocket
继承XMLSocket Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

XMLSocket 类可实现客户端套接字,从而使 Flash Player 或 AIR 应用程序可以与由 IP 地址或域名标识的服务器计算机进行通信。对于要求滞后时间较短的客户端/服务器应用程序,如实时聊天系统,XMLSocket 类非常有用。传统的基于 HTTP 的聊天解决方案频繁轮询服务器,并使用 HTTP 请求来下载新的消息。与此相对照,XMLSocket 聊天解决方案保持与服务器的开放连接,这一连接允许服务器即时发送传入的消息,而无需客户端发出请求。若要使用 XMLSocket 类,服务器计算机必须运行可识别 XMLSocket 类使用的协议的守护程序。下面的列表说明了该协议:

将服务器设置为与 XMLSocket 对象进行通信可能会遇到一些困难。如果您的应用程序不需要进行实时交互,请使用 URLLoader 类,而不要使用 XMLSocket 类。

若要使用 XMLSocket 类的方法,请先使用构造函数 new XMLSocket 创建一个 XMLSocket 对象。

只能与本地文件系统内容交互的沙箱中的 SWF 文件无法使用套接字。

目标主机上的套接字策略文件 指定 SWF 文件可从中建立套接字连接的主机,并指定可以建立这些连接的端口。在新近发布的几个版本的 Flash Player 中,有关套接字策略文件的安全要求变得更加严格。对于所有版本的 Flash Player,Adobe 建议使用套接字策略文件;在某些情况下,必须使用套接字策略文件。因此,如果使用的是 XMLSocket 对象,必要时请确保目标主机提供了套接字策略文件。

以下列表汇总了各个版本的 Flash Player 中针对套接字策略文件的要求:

但在 Adobe AIR 中,application 安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。

有关安全性的详细信息,请参阅以下部分:

查看示例

另请参见

flash.net.URLLoader.load()
flash.net.URLLoader
Socket connections


公共属性
 属性定义方
  connected : Boolean
[只读 (read-only)] 指示此 XMLSocket 对象目前是否已连接。
XMLSocket
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
  timeout : int
指示建立连接时需等待的毫秒数。
XMLSocket
公共方法
 方法定义方
  
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 端口建立到指定 Internet 主机的连接。
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 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
  在服务器关闭套接字连接时调度。XMLSocket
  在成功调用 XMLSocket.connect() 方法后调度。XMLSocket
  在发送或接收原始数据后调度。XMLSocket
 Inherited[广播事件] 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 对象。若未指定参数,将创建一个最初处于断开状态的套接字。 若指定了参数,则尝试连接到指定的主机和端口。

注意:强烈建议使用不带参数的构造函数形式,并添加任意事件侦听器,然后使用 hostport 参数调用 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 页中设置 objectembed 标签的 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:SecurityErrorEvent — 连接操作试图连接到调用方的安全沙箱外部的主机,或试图连接到需要套接字策略文件的端口。可以通过在目标主机上使用套接字策略文件来解决上述任何一个问题。
 
data:DataEvent — 在收到原始数据时调度。
 
connect:Event — 在建立网络连接后调度。

引发
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.Event
属性 Event.type = flash.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.Event
属性 Event.type = flash.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.DataEvent
属性 DataEvent.type = flash.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.IOErrorEvent
属性 IOErrorEvent.type = flash.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.SecurityErrorEvent
属性 SecurityErrorEvent.type = flash.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 要显示为错误消息的文本。

另请参见

示例 如何使用示例
XMLSocketExample.as

下例使用 XMLSocketExample 类来通过 XMLSocket 发送数据并输出 XMLSocket 事件过程中的信息。 这是使用以下步骤完成的:
  1. XMLSocketExample 构造函数创建名为 socket 的 XMLSocket 实例,并将 socket 传递给 ConfigureListeners()(如下所述),然后使用主机名“localhost”和端口号 8080 调用 connect() XMLSocket 的方法。
  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);
            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);
        }
    }
}