0

我有一个使用闪存作为其接口的应用程序,我想从这个应用程序中提取信息,并在我自己的应用程序中解析/使用它(它处理数据,将必需品存储在 mysqldb 中等等)。这些.swf文件是用 AS2 编写的,可以很容易地修改。

所以我的目标是通过任何方式发送信息(实际上只是信息。能够发送数字(至少大小合适)将使我能够以任何方式实现自己的编码和分区协议),我当然对这些方式并不挑剔.

这是我目前的方法(不是我自己的想法,归功于 koreanrandom.org。我只是使用他们的资源来学习):

  • 使用 DokanLib 挂载一个虚拟文件系统(并实现getFileInformation-handler)
  • LoadVars在 AS2-Environment 中使用参数,如"../.logger/@encoded_information"
  • 由于getFileInformation获取访问的文件名作为参数,我可以对其进行解码,将几个重新组合在一起(如果必须拆分它们,Windows 似乎不喜欢具有数百个字符长度的文件名)并使用解码后的数据

但是,我的应用程序经常导致蓝屏(不要问为什么。我不知道,蓝屏消息总是不同的)并且 koreanrandom.org 的开发人员不喜欢被问太多问题,所以我来这里询问其他方法将信息从沙盒闪存环境传递到准备好的侦听器。

我开始考虑一些奇怪的事情(好吧,滥用虚拟文件系统和文件名作为信息传输的手段也可能很奇怪 - 但它仍然是一个好主意),比如调用某些 Windows 函数并使用全局钩子,但我还没有掌握一个认真的计划。

像通过这样的方法访问网络服务器的“常规”方法似乎不起作用:

var target_mc = createEmptyMovieClip("target_mc", this.getNextHighestDepth());
loadVariables("http://127.0.0.1/Tools/indata.php", "target_mc", "GET");

indata.php会创建一个文件,如果它被访问,但它没有。)

XMLSocket也不起作用,我尝试了以下代码示例(netcat -l在端口 12345 上使用):

Logger.add("begin");
var theSocket:XMLSocket = new XMLSocket();
theSocket.onConnect = function(myStatus) {
    if (myStatus) {
        Logger.add("XMLSocket sucessfully connected")
    }   else {
        Logger.add("XMLSocket NO CONNECTION");
    }
};
theSocket.connect("127.0.0.1", 12345);
var myXML:XML = new XML();
var mySend = myXML.createElement("thenode");
mySend.attributes.myData = "someData";
myXML.appendChild(mySend);
theSocket.send(myXML);
Logger.add("socket sent");

也根本不起作用,记录器的输出begin只是socket sent

注释:记录器是由来自 koreanrandom.org 的人创建的,并且依赖于他们的 dokan 实现,这从未对我造成蓝屏。虽然无法在我的实施中发现我的错误,所以我开始寻找其他方法来解决我的问题。

编辑:您的“质量消息系统”到底有什么问题?显然它不喜欢我使用标签“转义”和/或“信息”。

4

1 回答 1

0

嗯,很难说,试试 sendAndLoad 而不是 loadVariables

例子:

var result_lv:LoadVars = new LoadVars();
var send_lv:LoadVars = new LoadVars();
send_lv.variable1=value1;
send_lv.variable2=value2;

    f=this;//zachytka

result_lv.onLoad = function(success:Boolean) {
  if (success) {
trace("ok");
  } else {
    trace("error");
  }

};

send_lv.sendAndLoad("http://127.0.0.1/Tools/indata.php", result_lv, "GET"); //you may also use POST

这应该有效。它不起作用的原因也可能是闪存安全设置。尝试将这些东西移动到真实服务器或打开闪存设置管理器(也有一个替代在线版本)并将 127.0.0.1 添加到受信任域和/或测试文件位置到受信任位置(我使用 C:*)

于 2013-04-25T10:29:41.350 回答