天天看点

Socket套接字类 AS3

ActionScript3.0中引入的Socket类,使ActionScript可以建立套接字连接,并读取和写入原始二进制数据。在定义有关数据交换的操作方法时,ActionScript使用了两个接口:IDataInput接口和IDataOutput接口,分别定义数据的输入和输出。Socket类的设计实现了这两个接口,在实现方法时,关注二进制数据的输入和输出。因此,使用Socket类与服务器的二进制协议通讯非常轻易。

利用Socket类的构造函数创建Socket对象。Socket类的构造函数包含两个参数:

Socket(host:String=null,port:int=0)

Øhost:String(default=null)—要连接的主机的名称。若未指定此参数,将创建一个最初处于断开状态的套接字。

Øport:int(default=0)—要连接的端口号。若未指定此参数,将创建一个最初处于断开状态的套接字。

假如代码中提供了充足的参数,则可以成功的建立一个打开套接字连接。该构造函数在执行成功时,并不发送Event.COMPLETE事件,而是发送一个Event.CONNECT事件。远程网络连接的情况比较多变,应充分考虑响应连接的异步性,在代码中侦听Event.CONNECT事件,并在事件的侦听器中进行后续的操作。

代码中也可以使用connected属性查询Socket对象目前是否已连接。当连接建立时,connected属性为true。假如套接字没有连接,可以调用套接字对象的connect()方法,重建连接或者尝试使用新的地址和端口号。

Socket类使用二进制协议的服务器互操作,可以使FlashPlayer能够连接到邮件和新闻服务器,编写根据不同的Internet协议(例如POP3、SMTP、IMAP和NNTP)进行交互的代码。当服务器的服务可用,且套接字连接建立后,就可以向缓冲区中写入信息或者读取信息。缓冲区的数据需要双方配合操作。当服务器关闭连接时,FlashPlayer会接受到Event.CLOSE事件的通知。侦听这个事件,避免单方操作不存在的套接字连接。

1.读取缓冲区

读取是最常见的操作,究竟FlashPlayer经常是作为接受服务的一方,从远程索取数据。

在FlashPlayer中,可用的套接字读取操作很多,常见的有:

ØreadByte():从套接字读取一个带符号字节。

ØreadBytes(bytes:ByteArray,offset:uint=0,length:uint=0):从套接字读取length参数所指定的数据的字节数。

ØreadUTF():从套接字读取一个UTF-8字符串。

ØreadUTFBytes(length:uint):从套接字读取length参数所指定的UTF-8数据的字节数,并返回一个字符串。

ØreadObject():从以AMF序列化格式编码的套接字读取一个对象。该参数返回一个无类型类型。写入前可以进行压缩。

Socket类提供bytesAvailable参数,标记输入缓冲区中可读取的数据的字节数。这个参数是只读的。对套接字输出缓冲区中积累的所有数据进行刷新。

2.写入操作

对于客户端的FlashPlayer而言,写入套接字意味着向服务器端发送数据。write方法写入的数据不会被立即传送。

针对套接字的写操作主要有:

ØwriteByte(value:int):将一个字节写入套接字。

ØwriteBytes(bytes:ByteArray,offset:uint=0,length:uint=0):从指定的字节数组写入一系列字节。

ØwriteUTF(value:String):将参数指定的字符串写入缓冲。但实际上写入的信息要更多一些。以下数据写入套接字:一个无符号16位整数,它指示了指定UTF-8字符串的长度(以字节为单位),后面跟随字符串本身。

ØwriteObject(object:*):以AMF序列化格式将一个对象写入套接字。

ØwriteUTFBytes(value:String):将一个UTF-8字符串写入套接字。

这些数据在调用flush()方法之前一直被保存在队列中。使用flush()方法,对套接字输出缓冲区中积累的所有数据进行刷新。

当套接字使用完毕后,可以调用close()方法,关闭套接字连接关闭套接字。在调用close()方法时不会引发Event.CLOSE事件。

在调用close()方法之后,将无法读取或写入任何数据。但是套接字对象不会被删除。假如需要再次进行连接,不要重新建立套接字对象,只要直接对原有Socket对象调用connect()方法。

2Socket套接字类  套接字连接是一种持续的网络连接。一般的网络数据传递需要进行多次,每次之间是不连续的。但是套接字连接有助于避免频繁的询问用户连接。当套接字连接建立后,客户端和服务器之间就形成了一个临时的双向通道。服务器可以向客户端传送消息,类似于将数据包从服务器推向客户端,而无需客户端发出直接的请求。这是套接字连接最实用的部分。

套接字连接是一种基层的通信,但在ActionScript3.0中又分为两大类:二进制数据的套接字连接和XML数据的套接字连接。假如需要执行最基层的数据传输,可以使用ActionScript3.0的Sockect类,该类负责二进制数据的传输和读取。假如要进行格式化的文本数据传输,可以利用XML格式作为信息的格式,此时可以利用ActionScript的XMLSocket类。

继续阅读