Socket 接收

程式碼:

function SocketData(event:ProgressEvent):void {
trace("SocketData");
var receiveInfo:Array=new Array ;
var tempArray:Array=new Array ;
while (socket.bytesAvailable) {
if (socket.bytesAvailable!=0) {
var data:int=socket.readByte();
receiveInfo.push(data);
if (socket.bytesAvailable == 0) {
var splitArray:Array = new Array ;
splitArray = String(receiveInfo).split("-99,-99,");
for (var i = 0 ; i < splitArray.length; i++ ) {
tempArray = splitArray[i].split(",");
Assay_info(tempArray);
}
}
}
}
}

說明:
var receiveInfo:Array=new Array ;
var tempArray:Array=new Array ;

宣告兩個陣列做為預備用,
receiveInfo 用於接收資料,
tempArray 用於分割陣列用。

---------------------------------------------------------
while (socket.bytesAvailable) { ... }

迴圈應用,當有資料傳輸時,則執行迴圈內容,
當socket.bytesAvailable=0 則代表資料傳輸結束

---------------------------------------------------------
var data:int=socket.readByte();

宣告一個data (數值) 來讀取 socket 內的Byte資料,

---------------------------------------------------------
receiveInfo.push(data);

將數值推入陣列內

---------------------------------------------------------
if (socket.bytesAvailable == 0) { ... }

當資料傳輸結束後才執行其內容

---------------------------------------------------------
splitArray = String(receiveInfo).split("-99,-99,");

有可能因為封包堵塞的關係,會一次接受到兩個以上的封包,
所以要將封包分解開來,
此處舉例的封包結尾為-99,-99,
意思為跟伺服器的協定,將封包的結尾定為傳輸兩個-99 的數值 。
此時陣列的內容為一字串

例:
String(receiveInfo) = 01,04,05,03,09,11,12,22,08,-99,-99,09,11,12,22,08,01,04,05,03,09
分割後...
splitArray[0] = 01,04,05,03,09,11,12,22,08
splitArray[1] = 09,11,12,22,08,01,04,05,03,09

---------------------------------------------------------
for (var i = 0 ; i < splitArray.length; i++ ) {
tempArray = splitArray[i].split(",");
Assay_info(tempArray);
}

將 splitArray 的內容依照 "," 分割放入陣列內 ,
再利用 Assay_info 來分析所需要的數值
---------------------------------------------------------
[有錯誤請指正 !!]

沒有留言:

張貼留言