0

Flex でマシン統合を行う AIR プロジェクトを開発しています。あるマシンでは、私のアプリは非常にうまく機能し、マシンから必要なデータを受け取ることができます。2つ目は、「READY」という種類のオフ信号をマシンに送信し、それに対して「ACK」を返す(ハンドシェイク)必要があると思います。その後、通信のみが開始されます。

この '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 でこれを行う方法がわからないため、ここで立ち往生しています。どんなアイデアや提案も大歓迎です。

4

1 に答える 1

0

ソケット APIを使用すると、文字列とバイトをバイナリ ソケットに書き込むことができます。

ソケットが接続されたら、次のようなことができます:

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

送信する必要があるものを正確に送信するように、このコードを調整する必要があります。writeByteを使用して、ヌル ("\0") 文字または任意の制御文字を書き込むこともできます。

データを読み取るには、読み取りメソッドを使用する必要があります。

于 2013-01-07T09:43:55.203 に答える