Actionscript 3 从设备与桌面Air应用程序通信

Actionscript 3 从设备与桌面Air应用程序通信,actionscript-3,flash,air,Actionscript 3,Flash,Air,我一直在寻找一些关于如何做到这一点的例子,但我能找到的唯一信息并没有真正让我明白 我希望这里有人能提供一些见解 我目前有一个空气应用程序,我做了一段时间前。air应用程序在第3帧停止,我必须使用鼠标单击继续。我想做的是,当我在设备(手机/平板电脑)上加载的html页面上单击btn时,进入下一帧。Air应用程序本身将一直运行 我有一个服务器设置,所以我可以从我的设备(本地网络)访问html按钮 我还实现了它,以了解它如何与我的服务器交互。当我运行air应用程序时,我可以看到它调用服务器,并且air

我一直在寻找一些关于如何做到这一点的例子,但我能找到的唯一信息并没有真正让我明白

我希望这里有人能提供一些见解

我目前有一个空气应用程序,我做了一段时间前。air应用程序在第3帧停止,我必须使用鼠标单击继续。我想做的是,当我在设备(手机/平板电脑)上加载的html页面上单击btn时,进入下一帧。Air应用程序本身将一直运行

我有一个服务器设置,所以我可以从我的设备(本地网络)访问html按钮

我还实现了它,以了解它如何与我的服务器交互。当我运行air应用程序时,我可以看到它调用服务器,并且air应用程序在调试器输出中打印来自服务器的一些结果。但事实上,这不是我想做的。它只是表明存在一些连接。但流程完全错了

所以我的问题是。有谁能告诉我一些关于如何从同一网络中的其他设备触发Air应用程序中的帧的详细信息吗?另一台设备不需要任何闪存。只要一个简单的html按钮就可以了


谢谢

我想说你们这里有两条可能的路线

  • 在服务器上创建脚本以启动与air应用程序的连接。例如,使用php和a,链接类似于
    http://myserver/nextslide.php
    然后可以通过您选择的TCP端口连接到您的air应用程序。根据您的服务器和可用的脚本语言,这里有很多选项

  • 将air应用程序设置为web服务器,以允许浏览器直接发送HTTP请求。例如,有一个非常简单的air HTTP服务器(它不比在每个请求结束时关闭连接的套接字服务器多多少)。您仍然可以像当前一样从主web服务器提供html,但是从air应用程序中的HTTP服务器,当在HTTP头中找到相关URI时,您只需要转到下一张幻灯片。如果你只需要它在你的本地网络中工作,这就是我想要的


  • 上述选项2的示例as3代码,使用带有FlashDevelop的空气投影仪进行测试:

    package 
    {
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.ProgressEvent;
        import flash.events.ServerSocketConnectEvent;
        import flash.net.ServerSocket;
        import flash.net.Socket;
        import flash.utils.ByteArray;
    
        public class Main extends Sprite 
        {
            private var serverSocket:ServerSocket;
            private var port:int = 8080;
    
            public function Main():void 
            {
                listen();
            }
    
            private function listen():void
            {
                try
                {
                    serverSocket = new ServerSocket();
                    serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                    serverSocket.bind(port);
                    serverSocket.listen();
                    trace("Listening on port " + port + "...\n");
                }
                catch (error:Error)
                {
                    trace("Failed to open server socket");
                }
            }
    
            private function socketConnectHandler(event:ServerSocketConnectEvent):void
            {
                var socket:Socket = event.socket;
                socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
            }
    
            private function socketDataHandler(event:ProgressEvent):void
            {
                try
                {
                    var socket:Socket = event.target as Socket;
                    var bytes:ByteArray = new ByteArray();
                    socket.readBytes(bytes);
                    var request:String = "" + bytes;
                    trace(request);
                    var url:String = request.substring(4, request.indexOf("HTTP/") - 1);
    
                    socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                    socket.writeUTFBytes("Content-Type: text/plain\n\n");
    
                    if (url == "/next")
                    {
                        socket.writeUTFBytes("next frame triggered");
    
                        var someMovie:MovieClip = new MovieClip(); //define this as a reference to the movie clip you want to control
                        someMovie.nextFrame();
                    }
                    else
                    {
                        socket.writeUTFBytes("The url is " + url);
                    }
    
                    socket.flush();
                    socket.close();
                }
                catch (error:Error)
                {
                    trace(error);
                }
            }
        }
    }
    

    那么你能在你的AIR应用程序中收到消息吗?只需要更改帧的帮助吗?嗯,只有在我运行air应用程序的调试时,air应用程序才会点击服务器。这不是我真正需要的流量。但它确实证明了某种连接正在发生。需要做的是,air应用程序使用一个端口监听服务器上的连接,然后以某种方式从html页面触发所有这些。试图将它重构成我可以使用的东西是一个小把戏。此外,从mxml中提取AS并使其作为常规fla/.AS运行也是一项挑战。我发布了一些工作查询,希望有人能将代码重构成我所需要的——但每个人都很难理解它是如何完成的。