2013-01-07 71 views
0

我正在開發一個AIR項目來在Flex中進行機器集成。在一臺機器上,我的應用程序工作得非常好,我可以根據需要從機器接收數據。在第二種情況下,我認爲就像我們必須發送'READY'類型的關閉信號到我們將得到'ACK'的機器(握手),然後只有通信開始。通過套接字在flex中發送就緒信號

這個'READY'信號如何使用Socket從ActionAcript發送。

我的ActionScript類文件看起來像這樣..

protected var socket:Socket; 
public function init():void 
{ 
    socket = new Socket; 
    socket.addEventListener(Event.CONNECT, onConnect); 
    socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); 
    socket.addEventListener(Event.CLOSE, onClose); 
} 

/*** connect to the socket */ 
public function connect():void 
{ 
    if(socket.connected) 
    { 
     Status = "Socket is already listening to Port " + socket.remotePort + " in " + socket.remoteAddress; 
     return; 
    } 
    socket.connect("localhost", 5331); 
} 

/*** handles socket connect event */ 
private function onConnect(event:Event):void 
{ 
    if(socket.connected) 
     Status = "Connection established successfully from " + Capabilities.os; 
    else 
     Status = "Connection failure!"; 
} 

/*** manipulation of received data */ 
private function onSocketData(event:ProgressEvent):void 
{ 
    //Data Recieved 
} 

/*** handles socket close event */ 
protected function onClose(event:Event):void 
{ 
    Status = "Socket Connection is being closed.."; 
} 

本機(KR-8900)的輸出爲RS232 .. 8針微型DIN(男)..和系統是db9引腳(像往常一樣)..串口通信由外部工具'SerProxy'完成。 SerProxy將向/從機器系統發送和接收數據。使用該應用程序,我將不得不使用套接字連接到系統中的端口,並執行讀取操作。

我這裏的問題是我沒有收到我的onSocketData函數中的任何數據。在通信開始之前,我需要發送READY信號。我被困在這裏,因爲我不知道如何在Flex中執行此操作。任何想法或建議都受到熱烈歡迎。

回答

0

Socket API允許您將字符串和字節寫入二進制套接字。

當套接字連接,你可以這樣做:

socket.writeUTFBytes("READY"); 
socket.flush(); 

你必須去適應這個代碼,以便它會送你需要到底是什麼派。您也可以使用writeByte來編寫空(「\ 0」)字符或任何控制字符。

要讀取數據,您需要使用讀取方法。