1

我在 Air 上创建了一个应用程序,用于与 WiFly 设备对话。由于 android 不支持 Ad-Hoc,我决定将 android 设为热点并让 WiFly 加入其中。我正在尝试与http://dka.web-republic.de/2012/08/connecting-arduino-and-android-wireless-via-wifi-using-the-rn-xv-wifly-module做同样的事情/ 但使用 Adob​​e Air。

我卡住的部分是WiFly加入热点空气后无法检测到它。我正在使用服务器套接字来侦听连接,但未触发事件。在 Daniel 的示例中,他获得了连接到热点的所有设备的客户端列表。这可能在空中吗?

感谢您的帮助。我的代码如下。

package
{
    import flash.events.DataEvent;
    import flash.events.Event;
    import flash.events.ServerSocketConnectEvent
    import flash.events.EventDispatcher;
    import flash.events.IOErrorEvent;
    import flash.events.ProgressEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.Socket;
    import flash.net.ServerSocket;
    import flash.utils.ByteArray;

    public class SerialPort extends EventDispatcher
    {
        private var _host        :String;
        private var _socket      :Socket;
        private var _serverSocket:ServerSocket;
        private var _port        :int;

        private var _startChar   :String;
        private var _stopChar    :String;       

        private var _receivedstr :String = ""; 
        private var _maxLength   :int = 128; 

        private var _tmpstr      :String;
        private var _findReturn  :int;
        private var _nlPattern   :RegExp = /\n/g;

        public function SerialPort( host:String = "127.0.0.1", port:int = 5331, sC:String = "", eC:String ="\r")
        {               
            super();

            _host      = host;
            _port      = port;
            _startChar = sC;
            _stopChar  = eC;

            _socket = new Socket();
            _serverSocket = new ServerSocket;
            if(ServerSocket.isSupported)
            {
                dispatchEvent(new Event("SERVER_SUPPORTED") );
            }
            _socket.addEventListener( Event.CLOSE, onClose );
            _socket.addEventListener( Event.CONNECT, onConnect );
            _socket.addEventListener( IOErrorEvent.IO_ERROR, onIOErrorEvent );
            _socket.addEventListener( SecurityErrorEvent.SECURITY_ERROR, onSecurityError );
            _socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
        }


        public function get connected():Boolean
        {
            return _socket.connected;
        }

        public function close():void
        {
            _socket.close();
        }

        public function bind():void
        {
            if( _serverSocket.bound ) 
            {
                _serverSocket.close();
                _serverSocket = new ServerSocket();

            }
            trace(_port, _host);
            _serverSocket.bind(_port,_host );
            _serverSocket.addEventListener( ServerSocketConnectEvent.CONNECT, onConnect );
            _serverSocket.listen();
            trace( "Bound to: " + _serverSocket.localAddress + ":" + _serverSocket.localPort );
        }
        /*
        public function connect():void
        {                   
            _socket.connect( _host, _port );
            trace( "connecting" );
        }
        */
        public function writeString( value:String ):void
        {   
            // end send every message with a carriage return (used by Messenger library for Arduino)        
            //trace(value);
            //value += "\r";

            _socket.writeUTFBytes( value );
            _socket.writeUTFBytes( "\r" );
            _socket.flush();        
        }


        private function onClose( event:Event ):void
        {
            trace( "onClose" );
            dispatchEvent( event );
        }

        private function onConnect( event:ServerSocketConnectEvent ):void
        {
            _socket = event.socket;
            _socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
            trace( "Connection from " + _socket.remoteAddress + ":" + _socket.remotePort );
            trace( "onConnect" );
            dispatchEvent(new Event("WIFI_CONNECTED") );
        }

        private function onIOErrorEvent( event:IOErrorEvent ):void
        {
            trace( "onIOErrorEvent" );
            dispatchEvent( event );
        }

        private function onSecurityError( event:SecurityErrorEvent ):void
        {
            trace( "onSecurityError" );
            dispatchEvent( event );
        }

        private function onSocketData( event:ProgressEvent ):void
        {   
            // read incoming data from the buffer and add it to _receivedstr
            _receivedstr += _socket.readUTFBytes(_socket.bytesAvailable);

            // find the stop character (default carriage return) in the string
            _findReturn = _receivedstr.indexOf(_stopChar, 0);

            // when found an event is dispatched and empty the _receivedstr
            if(_findReturn>0)
            {       
                // check if message is complete by checking the first character
                // if start character is not empty or the same as the startcharacter dispatch the data
                if(_startChar=="")
                {   dispatchData(0);                    
                }   
                else if (_receivedstr.charAt(0) == _startChar)
                {   dispatchData(1);                    
                }
            }

            // sometimes carriage returns are not detected good
            // this line resets the _receivedstr when the string gets too long
            if(_receivedstr.length>_maxLength) _receivedstr = "";

            //trace("length of string : "+_receivedstr.length);
        }

        private function dispatchData(startpos:int)
        {   
            // make the substring out of the received data (to remove start character is necessary)                         
            _tmpstr = _receivedstr.substring(startpos,_findReturn);

            // remove newline (\n) characters   
            _tmpstr = _tmpstr.replace(_nlPattern, "");

            dispatchEvent( new DataEvent( DataEvent.DATA, false, false, _tmpstr) );         
            _receivedstr = "";          
        }

    }

}
4

0 回答 0