将消息从沙箱发送到自定义应用程序
Posted
技术标签:
【中文标题】将消息从沙箱发送到自定义应用程序【英文标题】:sending message out of a sandbox to a custom application 【发布时间】:2013-04-13 12:39:12 【问题描述】:我有一个使用闪存作为其接口的应用程序,我想从该应用程序中提取信息,并在我自己的应用程序中解析/使用它(它处理数据,将必需品存储在 mysqldb 中等等)。
.swf
文件是用 AS2 编写的,可以很容易地修改。
所以我的目标是通过任何方式发送信息(实际上只是信息。能够发送数字(至少大小合适)将使我能够实现自己的编码和分区协议),我当然不挑剔关于手段。
这是我目前的方法(不是我自己的想法,归功于 koreanrandom.org。我只是使用他们的资源来学习):
使用 DokanLib 挂载虚拟文件系统(并实现getFileInformation
-handler)
在 AS2 环境中使用 LoadVars
和 "../.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
也不起作用,我尝试了以下代码示例(在端口 12345 上使用 netcat -l
):
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 实现,这从未对我造成蓝屏。虽然在我的实现中无法发现我的错误,所以我开始寻找其他方法来解决我的问题。
编辑:你的“质量信息系统”到底出了什么问题?显然它不喜欢我使用“转义”和/或“信息”标签。
【问题讨论】:
你应该尽量避免在你的句子中使用这么多(长)括号,它会破坏流程并使其难以阅读。谢谢! 【参考方案1】:嗯,不好说,试试用 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
这应该可以。它不起作用的原因也可能是闪存安全设置。尝试将这些东西移动到真实服务器或打开flash settings manager(也有alternative online version)并将127.0.0.1添加到受信任的域和/或测试文件位置到受信任的位置(我使用C:*)
【讨论】:
以上是关于将消息从沙箱发送到自定义应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot:将另一个端口上的请求发送到自定义 Servlet
如何将数据从 Arraylist 显示到自定义 ArrayAdapter