运行时版本: | AIR 1.0 Flash Player 9 |
Socket 类使 代码可以建立套接字连接并读取和写入原始二进制数据。它与 XMLSocket 类似,但没有指定接收或传输的数据格式。
Socket 类与使用二进制协议的服务器一起使用时非常有用。
若要使用 Socket 类的方法,请先使用构造函数 new Socket
创建一个 Socket 对象。
只能与本地文件系统内容交互的沙箱中的 SWF 文件无法使用套接字。
目标主机上的套接字策略文件 指定 SWF 文件可从中建立套接字连接的主机,并指定可以建立这些连接的端口。在新近发布的几个版本的 Flash Player 中,有关套接字策略文件的安全要求变得更加严格。对于所有版本的 Flash Player,Adobe 建议使用套接字策略文件;在某些情况下,必须使用套接字策略文件。因此,如果使用的是 XMLSocket 对象,必要时请确保目标主机提供了套接字策略文件。
以下列表汇总了各个版本的 Flash Player 中针对套接字策略文件的要求:
- 在 Flash Player 9.0.124.0 及更高版本中,套接字策略文件对于任何 Socket 连接都是必需的。也就是说,无论连接到哪一个端口(即使连接到提供 SWF 文件的同一主机上的端口),目标主机上都需要套接字策略文件。
- 在 Flash Player 9.0.115.0 版及更低版本中,如果要连接到小于 1024 的端口号或连接到除提供 SWF 文件的主机之外的主机,则目标主机上必须具有套接字策略文件。
- 在 Flash Player 9.0.115.0 中,尽管套接字策略文件不是必需的,但如果目标主机未提供套接字策略文件,那么当使用 Flash Debug Player 时,也会显示警告。
但在 Adobe AIR 中,application
安全沙箱中的内容(使用 AIR 应用程序安装的内容)不受这些安全限制的约束。
有关安全性的详细信息,请参阅以下部分:
-
《ActionScript 3.0 编程》一书中的“安全性”一章
和 LiveDocs 上的最新评论
-
Flash Player 开发人员中心主题:安全性
查看示例
bytesAvailable:uint
[只读 (read-only)]
运行时版本: | AIR 1.0 Flash Player 9 |
输入缓冲区中可读取的数据的字节数。
代码必须访问 bytesAvailable
以确保在尝试使用其中一种 read
方法读取数据之前,有足够的数据可用。
实现 public function get bytesAvailable():uint
connected:Boolean
[只读 (read-only)]
运行时版本: | AIR 1.0 Flash Player 9 |
指示此 Socket 对象目前是否已连接。如果该套接字当前已连接,则对此属性的调用将返回值 true
,否则将返回 false
。
实现 public function get connected():Boolean
endian:String
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
指示数据的字节顺序;可能的值为来自 flash.utils.Endian 类的常量,Endian.BIG_ENDIAN
或 Endian.LITTLE_ENDIAN
。
默认值为 Endian.BIG_ENDIAN.
实现 public function get endian():String
public function set endian(value:String):void
另请参见
objectEncoding:uint
[读写]
运行时版本: | AIR 1.0 Flash Player 9 |
在写入或读取对象时,控制所使用的 AMF 的版本。
实现 public function get objectEncoding():uint
public function set objectEncoding(value:uint):void
另请参见
timeout:uint
[读写]
运行时版本: | Flash Player 10, AIR 1.5 |
指示建立连接时需等待的毫秒数。
如果在指定时间内未成功建立连接,则连接失败。默认值是 20,000(20 秒)。
实现 public function get timeout():uint
public function set timeout(value:uint):void
public function Socket(host:String = null, port:int = 0)
运行时版本: | AIR 1.0 Flash Player 9 |
创建新的 Socket 对象。若未指定参数,将创建一个最初处于断开状态的套接字。若指定了参数,则尝试连接到指定的主机和端口。
注意:强烈建议使用不带参数的构造函数形式,并添加任意事件侦听器,然后使用 host
和 port
参数调用 connect
方法。此序列将确保所有事件侦听器工作正常。
参数 | host:String (default = null ) —
一个完全限定的 DNS 域名,或 111.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 文件的主机之外的主机时,才需要使用套接字策略文件。 |
事件 | connect:Event — 在建立网络连接后调度。 |
|
| ioError:IOErrorEvent — 在出现输入/输出错误并由此导致连接失败时调度。 |
|
| securityError:SecurityErrorEvent — 此错误出现在 SWF 内容中。如果对 Socket.connect() 的调用尝试连接到未提供套接字策略文件的服务器,或尝试连接到其策略文件未允许进行调用的主机访问指定端口的服务器,则调度此事件。有关套接字策略文件的详细信息,请参阅《ActionScript 3.0 编程》中的“Flash Player 安全性”一章。 |
引发 | SecurityError —
此错误出现在 SWF 内容中。 原因如下:
- 与本地文件系统内容交互的文件无法与 Internet 进行通信。您可以通过将此 SWF 文件重新分类为只能与远程内容交互或受信任来解决此问题。此限制不是为应用程序安全沙箱中的 AIR 应用程序内容设置的。
- 您不能指定高于 65535 的套接字端口。
|
public function close():void
运行时版本: | AIR 1.0 Flash Player 9 |
关闭套接字。在调用 close()
方法之后,将无法读取或写入任何数据。
仅在服务器关闭连接时调度 close
事件;在调用 close()
方法时不调度该事件。
可通过再次对 Socket 对象调用 connect()
方法来重复使用该对象。
引发 public function connect(host:String, port:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
将套接字连接到指定的主机和端口。如果连接立即失败,则调度一个事件或引发一个异常。如果指定了主机,则调度一个错误事件;如果未指定主机,则引发异常。另外,连接的状态由事件来报告。如果已连接上套接字,则现有的连接将首先关闭。
参数
| host:String — 要连接到的主机的名称或 IP 地址。如果未指定主机,则要连接的主机为执行调用的 文件所在的主机。如果不指定主机,请使用事件侦听器来确定连接是否成功。 |
|
| port:int — 要连接的端口号。 |
事件 | connect:Event — 在建立网络连接后调度。 |
|
| ioError:IOErrorEvent — 在指定了主机但出现输入/输出错误并由此导致连接失败时调度。 |
|
| securityError:SecurityErrorEvent — 如果对 Socket.connect() 的调用试图与未提供套接字策略文件的服务器进行连接,或者试图与其策略文件未授予执行调用的主机对指定端口的访问权的服务器进行连接,则调度此事件。有关详细信息,请参阅《ActionScript 3.0 编程》中的“Flash Player 安全性”一章。 |
引发 | IOError — 未指定任何主机,而且连接失败。 |
|
| SecurityError —
此错误出现在 SWF 内容中。 原因如下:
- 本地不受信任的 SWF 文件可能无法与 Internet 进行通信。可以通过将此文件重新分类为只能与远程内容交互的文件或受信任的文件来突破此限制。
- 您不能指定高于 65535 的套接字端口。
-
在包含 SWF 内容的 HTML 页中,
object 和 embed 标签的 allowNetworking 参数设置为 "none" 。
|
另请参见
public function flush():void
运行时版本: | AIR 1.0 Flash Player 9 |
对套接字输出缓冲区中积累的所有数据进行刷新。write
方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
引发 public function readBoolean():Boolean
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个布尔值。在读取一个字节之后,如果该字节不为零,则该方法返回 true
,否则返回 false
。
返回 | Boolean —
如果所读取的字节不为零,则值为 true ,否则为 false 。
|
引发 public function readByte():int
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个带符号字节。
返回引发 public function readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取 length
参数所指定的数据的字节数。从 offset
所指示的位置开始,将这些字节读入指定的字节数组。
参数
| bytes:ByteArray — 要将数据读入的 ByteArray 对象。 |
|
| offset:uint (default = 0 ) — 数据读取的偏移量应从该字节数组中开始。 |
|
| length:uint (default = 0 ) — 要读取的字节数。默认值 0 导致读取所有可用的数据。 |
引发 public function readDouble():Number
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个 IEEE 754 双精度浮点数。
返回引发 public function readFloat():Number
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个 IEEE 754 单精度浮点数。
返回引发 public function readInt():int
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个带符号的 32 位整数。
返回 | int — 从 -2147483648 至 2147483647 的值。 |
引发 public function readMultiByte(length:uint, charSet:String):String
运行时版本: | AIR 1.0 Flash Player 9 |
使用指定的字符集,从该字节流读取一个多字节字符串。
参数
| length:uint — 要从字节流中读取的字节数。 |
|
| charSet:String —
表示用于解释字节的字符集的字符串。可能的字符集字符串包括 "shift_jis" 、"CN-GB" 和 "iso-8859-1" 。有关完整列表,请参阅Supported Character Sets。
注意:如果当前系统无法识别 charSet 参数的值,则应用程序将使用系统的默认代码页作为字符集。例如,charSet 参数的值(如在使用 01 而不是 1 的 myTest.readMultiByte(22, "iso-8859-01") 中)可能在您的开发计算机上起作用,但在其它计算机上可能不起作用。在其他计算机上,应用程序将使用系统的默认代码页。
|
返回引发 public function readObject():*
运行时版本: | AIR 1.0 Flash Player 9 |
从以 AMF 序列化格式编码的套接字读取一个对象。
返回引发另请参见
public function readShort():int
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个带符号的 16 位整数。
返回 | int — 从 -32768 至 32767 的值。 |
引发 public function readUnsignedByte():uint
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个无符号字节。
返回引发 public function readUnsignedInt():uint
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个无符号的 32 位整数。
返回 | uint — 从 0 至 4294967295 的值。 |
引发 public function readUnsignedShort():uint
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个无符号的 16 位整数。
返回引发 public function readUTF():String
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取一个 UTF-8 字符串。假定该字符串的前缀是指示字符串长度(以字节为单位)的无符号短整数。
返回引发 public function readUTFBytes(length:uint):String
运行时版本: | AIR 1.0 Flash Player 9 |
从套接字读取 length
参数所指定的 UTF-8 数据的字节数,并返回一个字符串。
参数
返回引发 public function writeBoolean(value:Boolean):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个布尔值写入套接字。此方法写入了一个字节,其值为 1 (true
) 或 0 ( false
)。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
| value:Boolean —
要写入套接字的值:1 (true ) 或 0 ( false )。
|
引发另请参见
public function writeByte(value:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个字节写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
| value:int — 要写入套接字的值。使用了该值的低 8 位;忽略了高 24 位。 |
引发另请参见
public function writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
运行时版本: | AIR 1.0 Flash Player 9 |
从指定的字节数组写入一系列字节。写入操作从 offset
指定的位置开始。
如果省略了 length
参数,则默认长度 0 将导致该方法从 offset
开始写入整个缓冲区。
如果还省略了 offset
参数,则写入整个缓冲区。
如果 offset
或 length
超出了范围,则调整它们以匹配 bytes
数组的开头和结尾。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
| bytes:ByteArray — 要从中读取数据的 ByteArray 对象。 |
|
| offset:uint (default = 0 ) —
bytes ByteArray 对象中从零开始的偏移量,应由此开始执行数据写入。
|
|
| length:uint (default = 0 ) —
要写入的字节数。默认值 0 导致从 offset 参数指定的值开始写入整个缓冲区。
|
引发另请参见
public function writeDouble(value:Number):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个 IEEE 754 双精度浮点数写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeFloat(value:Number):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个 IEEE 754 单精度浮点数写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeInt(value:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个带符号的 32 位整数写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeMultiByte(value:String, charSet:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
使用指定的字符集,从该字节流写入一个多字节字符串。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
另请参见
public function writeObject(object:*):void
运行时版本: | AIR 1.0 Flash Player 9 |
以 AMF 序列化格式将一个对象写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeShort(value:int):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个 16 位整数写入套接字。写入的字节如下:
(v >> 8) & 0xff v & 0xff
使用了该参数的低 16 位;忽略了高 16 位。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeUnsignedInt(value:uint):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个无符号的 32 位整数写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeUTF(value:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
将以下数据写入套接字:一个无符号 16 位整数,它指示了指定 UTF-8 字符串的长度(以字节为单位),后面跟随字符串本身。
写入字符串之前,该方法会计算表示该字符串的所有字符所需的字节数。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
public function writeUTFBytes(value:String):void
运行时版本: | AIR 1.0 Flash Player 9 |
将一个 UTF-8 字符串写入套接字。
注意:此方法写入的数据不会被立即传送;这些数据在调用 flush()
方法之前一直被保存在队列中。
参数
引发另请参见
事件对象类型: flash.events.Event
属性 Event.type = flash.events.Event.CLOSE
运行时版本: | AIR 1.0 Flash Player 9 |
在服务器关闭套接字连接时调度。仅在服务器关闭连接时调度 close
事件;在调用 Socket.close()
方法时不调度该事件。
Event.CLOSE
常量定义
close
事件对象的
type
属性的值。
此事件具有以下属性:
属性 | 值 |
---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 已关闭其连接的对象。 |
事件对象类型: flash.events.Event
属性 Event.type = flash.events.Event.CONNECT
运行时版本: | AIR 1.0 Flash Player 9 |
在建立网络连接后调度。
Event.CONNECT
常量定义
connect
事件对象的
type
属性值。
此事件具有以下属性:
属性 | 值 |
---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 已建立网络连接的 Socket 或 XMLSocket 对象。 |
事件对象类型: flash.events.IOErrorEvent
属性 IOErrorEvent.type = flash.events.IOErrorEvent.IO_ERROR
运行时版本: | AIR 1.0 Flash Player 9 |
在出现输入/输出错误并导致发送或加载操作失败时调度。
定义
ioError
事件对象的
type
属性值。
此事件具有以下属性:
属性 | 值 |
---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
errorID
| 与特定错误关联的引用编号(仅限 AIR)。 |
target
| 发生输入/输出错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
事件对象类型: flash.events.SecurityErrorEvent
属性 SecurityErrorEvent.type = flash.events.SecurityErrorEvent.SECURITY_ERROR
运行时版本: | AIR 1.0 Flash Player 9 |
若对 Socket.connect()
的调用尝试连接到调用方安全沙箱外部的服务器或端口号低于 1024 端口,则进行调度。
SecurityErrorEvent.SECURITY_ERROR
常量定义
securityError
事件对象的
type
属性值。
此事件具有以下属性:
属性 | 值 |
---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target
| 报告安全错误的网络对象。 |
text
| 要显示为错误消息的文本。 |
另请参见
事件对象类型: flash.events.ProgressEvent
属性 ProgressEvent.type = flash.events.ProgressEvent.SOCKET_DATA
运行时版本: | AIR 1.0 Flash Player 9 |
在套接字接收到数据后调度。socketData
类型的事件不使用 ProgressEvent.bytesTotal
属性。
定义
socketData
事件对象的
type
属性值。
此事件具有以下属性:
属性 | 值 |
---|
bubbles
|
false
|
cancelable
|
false ;没有要取消的默认行为。
|
currentTarget
| 当前正在处理此事件的对象。 |
bytesLoaded
| 在侦听器处理事件时加载的项数或字节数。 |
bytesTotal
|
0;socketData 事件对象不使用此属性。
|
target
| 报告进度的 Socket 对象。 |
下例对套接字执行读写操作,并输出在套接字事件期间传输的信息。 该示例的要点遵循:
-
该构造函数创建名为
socket
的 CustomSocket
实例,并将主机名 localhost
和端口 80 作为参数传递。 由于 CustomSocket
扩展了 Socket,因此在调用 super()
时将调用 Socket 的构造函数。
-
然后,该示例调用了
configureListeners()
方法,该方法可为 Socket 事件添加侦听器。
-
最后,调用套接字
connect()
方法,其中使用 localhost
作为主机名并使用 80 作为端口号。
注意:若要运行该示例,您需要一台与 SWF 位于同一个域(在本例中为 localhost
)服务器并侦听端口 80。
package {
import flash.display.Sprite;
public class SocketExample extends Sprite {
public function SocketExample() {
var socket:CustomSocket = new CustomSocket("localhost", 80);
}
}
}
import flash.errors.*;
import flash.events.*;
import flash.net.Socket;
class CustomSocket extends Socket {
private var response:String;
public function CustomSocket(host:String = null, port:uint = 0) {
super();
configureListeners();
if (host && port) {
super.connect(host, port);
}
}
private function configureListeners():void {
addEventListener(Event.CLOSE, closeHandler);
addEventListener(Event.CONNECT, connectHandler);
addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function writeln(str:String):void {
str += "\n";
try {
writeUTFBytes(str);
}
catch(e:IOError) {
trace(e);
}
}
private function sendRequest():void {
trace("sendRequest");
response = "";
writeln("GET /");
flush();
}
private function readResponse():void {
var str:String = readUTFBytes(bytesAvailable);
response += str;
}
private function closeHandler(event:Event):void {
trace("closeHandler: " + event);
trace(response.toString());
}
private function connectHandler(event:Event):void {
trace("connectHandler: " + event);
sendRequest();
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}
private function socketDataHandler(event:ProgressEvent):void {
trace("socketDataHandler: " + event);
readResponse();
}
}
© 2004-2008 Adobe Systems Incorporated. All rights reserved.
Sun Dec 14 2008, 10:39 PM -08:00