顯示具有 Socket 標籤的文章。 顯示所有文章
顯示具有 Socket 標籤的文章。 顯示所有文章

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 來分析所需要的數值
---------------------------------------------------------
[有錯誤請指正 !!]

Socket 建立 簡單說

程式碼:

import flash.net.Socket;

var socket:Socket; //建立socket

XXXX_Socket("IP", port);

function XXXX_Socket(ip:String, port:int) {
trace("enter XXXX");
socket=new Socket ;
socket.connect(ip, port);
//監測是否有資料接收
socket.addEventListener(ProgressEvent.SOCKET_DATA, SocketData);
socket.addEventListener(Event.CLOSE, closeHandler);
socket.addEventListener(Event.CONNECT, connectHandler);
socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
}



說明:

XXXX_Socket("IP", port);

指定 ip 和 port 給予 function XXXX_Socket

socket.connect(ip, port);

建立socket連線

socket.addEventListener(ProgressEvent.SOCKET_DATA, SocketData);

監聽連線,當有資料傳輸進入時,執行 function SocketData