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()方法。