ByteArray
Class public class ByteArray
继承 ByteArray --> Object
Implements IDataInput, IDataOutput
Subclasses ByteArrayAsset
属性:
bytesAvailable : uint [] 可从字节数组的当前位置到数组末尾读取的数据的字节数。
defaultObjectEncoding : uint [] 指示用于新 ByteArray 实例的 ByteArray 类的默认对象编码。
length : uint ByteArray 对象的长度(以字节为单位)。
position : uint 将文件指针的当前位置(以字节为单位)移动或返回到 ByteArray 对象中。
方法:
ByteArray() 创建一个表示填充的字节数组的 ByteArray 实例,以便使用此类中的方法和属性来优化数据存储和数据流。
writeUTF(value:String):void 将 UTF-8 字符串写入字节流。
writeUTFBytes(value:String):void 将 UTF-8 字符串写入字节流。
writeByte(value:int):void 在字节流中写入一个字节。
writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void
将指定字节数组 bytes(起始偏移量为 bytes,从 0 开始的索引)中包含 length 个字节的字节序列写入字节流。
offset:uint (default = 0) — 从 0 开始的索引,表示在数组中开始写入的位置。
Socket
Class public class Socket
继承 Socket EventDispatcher Object
Implements IDataInput, IDataOutput
类使 代码可以建立套接字连接并读取和写入原始二进制数据。它与 XMLSocket 类似,但没有指定接收或传输的数据格式。
属性:
bytesAvailable : uint [] 输入缓冲区中可读取的数据的字节数。
connected : Boolean [] 指示此 Socket 对象目前是否已连接。
objectEncoding : uint 在写入或读取对象时,控制所使用的 AMF 的版本。
方法:
Socket(host:String = null, port:int = 0) 创建一个 Socket 对象。
close():void 关闭套接字。 Socket
connect(host:String, port:int):void 将套接字连接到指定的主机和端口。 Socket
dispatchEvent(event:Event):Boolean 将事件调度到事件流中。 EventDispatcher
flush():void 对套接字输出缓冲区中积累的所有数据进行刷新。
readByte():int 从套接字读取一个带符号字节。 Socket
readBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 从套接字读取 length 参数所指定的数据的字节数。
readMultiByte(length:uint, charSet:String):String 使用指定的字符集,从该字节流读取一个多字节字符串。
readUnsignedByte():uint 从套接字读取一个无符号字节。 Socket
readUnsignedInt():uint 从套接字读取一个无符号的 32 位整数。 Socket
readUnsignedShort():uint 从套接字读取一个无符号的 16 位整数。
readUTF():String 从套接字读取一个 UTF-8 字符串。 Socket
readUTFBytes(length:uint):String 从套接字读取 length 参数所指定的 UTF-8 数据的字节数,并返回一个字符串。
writeByte(value:int):void 将一个字节写入套接字。 Socket
writeBytes(bytes:ByteArray, offset:uint = 0, length:uint = 0):void 从指定的字节数组写入一系列字节。
writeMultiByte(value:String, charSet:String):void 使用指定的字符集,从该字节流写入一个多字节字符串。 Socket
writeObject(object:*):void 以 AMF 序列化格式将一个对象写入套接字。 Socket
writeShort(value:int):void 将一个 16 位整数写入套接字。 Socket
writeUnsignedInt(value:uint):void 将一个无符号的 32 位整数写入套接字。 Socket
writeUTF(value:String):void 将以下数据写入套接字:一个无符号 16 位整数,它指示了指定 UTF-8 字符串的长度(以字节为单位),后面跟随字符串本身。 Socket
writeUTFBytes(value:String):void 将一个 UTF-8 字符串写入套接字。
事件: Event.XX close 在服务器关闭套接字连接时调度。 Socket connect 在建立网络连接后调度。 Socket deactivate Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时调度。 EventDispatcher ioError 在出现输入/输出错误并导致发送或加载操作失败时调度。 Socket securityError 若对 Socket.connect() 的调用尝试连接到调用方安全沙箱外部的服务器或端口号低于 1024 的端口,则进行调度。 Socket socketData 在套接字接收到数据后调度。
--------------------------------------------------------------------------
Flex 端 代码(跟好的理解Socket):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="353" height="336"
creationComplete="initApp();" >
<mx:Script>
<![CDATA[
private var socket:Socket = new Socket();
private var intClient:int; //定义客户端数字出拳
private var intServer:int; //定义服务端数字出拳
private var intSY:int; //定义输赢判断
private var strClient:String; //客户端文字出拳
private var strServer:String; //服务端的文字出拳
internal function initApp():void{
socket.connect("127.0.0.1",8888);
socket.addEventListener(Event.CONNECT,funConnect);
socket.addEventListener(Event.CLOSE,funClose);
socket.addEventListener(ProgressEvent.SOCKET_DATA,funSocket);
}
internal function funConnect(e:Event):void{
myText.text+="连接已建立 \n";
}
internal function funClose(e:Event):void{
myText.text+="连接已关闭 \n";
}
private function sendMessage(msg:String):void{
var message:ByteArray = new ByteArray();
message.writeUTF(msg); //发送出拳数字
socket.writeBytes(message);
socket.flush();
intClient=int(msg);
switch(intClient){ //将数字转换成文字用于发布到屏幕上
case 0:
strClient="剪刀";
break;
case 1:
strClient="锤";
break;
case 2:
strClient="包袱";
break;
}
myText.text+="你出:"+strClient+"; ";
myInput.text="";
}
internal function funSocket(e:ProgressEvent):void{ //接到服务器信息
var msg:String="";
while(socket.bytesAvailable)
{
msg=socket.readUTF();
intServer=int(msg);
intSY=intClient-intServer; //通过数值判断输赢
switch(intServer) //将数字转换成文字用于发布到屏幕上
{
case 0:
strServer="剪刀";
break;
case 1:
strServer="锤";
break;
case 2:
strServer="包袱";
break;
}
myText.text+="服务器出:"+strServer+"; ";
//判断输赢的算法
if(intSY>0&&intSY<2)
{
myText.text+=" 结果:你赢了 \n";
}else if(intClient==intServer)
{
myText.text+=" 结果:平手 \n";
}else if(intSY<0&&intSY>-2)
{
myText.text+=" 结果:你输了 \n";
}else if(intSY>=2)
{
myText.text+=" 结果:你输了 \n";
}else if(intSY<=-2)
{
myText.text+=" 结果:你赢了 \n";
}
// myText滚动到最下面
myText.verticalScrollPosition = myText.maxVerticalScrollPosition;
}
}
]]>
</mx:Script>
<mx:TextArea x="10" y="32" width="331" height="263" id="myText"/>
<mx:TextInput x="10" y="303" width="245" id="myInput"/>
<mx:Button x="273" y="304" label="发送" id="myBtn" click="sendMessage(myInput.text)"/>
<mx:Label x="10" y="10" text="规则:0代表剪刀;1代表锤;2代表包袱" width="331" fontWeight="bold"/>
</mx:Application>