我会说你在这里有两条可能的路线。
在您的服务器上创建一个脚本以启动与您的空中应用程序的连接。例如使用 php 和socket,链接将类似于http://myserver/nextslide.php
然后可以在您选择的 TCP 端口上连接到您的空中应用程序。这里有很多选项,具体取决于您的服务器和可用的脚本语言。
将您的 air 应用程序设置为 Web 服务器,以允许您的浏览器直接发送 HTTP 请求。例如,这里有一个非常简单的空中 HTTP 服务器 (它只不过是一个在每个请求结束时关闭连接的套接字服务器)。您仍然可以像当前一样从主 Web 服务器提供您的 html,但是当在 HTTP 标头中找到相关 URI 时,您只需从空中应用程序中的 HTTP 服务器移动到下一张幻灯片。如果您只需要它在您的本地网络中工作,这就是我想要的。
上面选项 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);
}
}
}
}