我知道这件事有很多地方,但是,尽管如此,我还是不明白。如果你们能容忍我的话
所以,我有一个密码:
import flash.net.*;
import fl.controls.*;
import flash.events.MouseEvent;
import flash.events.DataEvent;
import flash.events.SecurityErrorEvent;
var mySocket = new XMLSocket();
trace(Security.sandboxType)
pushMsg.addEventListener(MouseEvent.CLICK, realsedButton);
//mySocket.connect("192.124.5.2",9999);
mySocket.addEventListener(Event.CONNECT, xmlsocket);
mySocket.addEventListener(Event.CLOSE, xmlsocket);
mySocket.addEventListener(IOErrorEvent.IO_ERROR, xmlsocket);
mySocket.addEventListener(DataEvent.DATA, dataHandler);
mySocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityHandler);
msgArea.htmlText = "Started!";
connectToServer();
function connectToServer()
{
msgArea.htmlText += "Inside connect To Server";
mySocket.connect("localhost",9999);
}
function securityHandler(evt: SecurityErrorEvent)
{
msgArea.htmlText += "SecurityError";
}
function dataHandler(evt:DataEvent)
{
trace("Inside dataHandler")
var xml = XML(evt.target.data);
msgArea.htmlText += xml;
}
function xmlsocket(Event)
{
msgArea.htmlText += "inside xmlSocket";
switch(Event.type)
{
case 'ioError':
msgArea.htmlText += "Inside dataHandler";
msgArea.htmlText += "<b>Server connection failed!</b>";
break;
case 'connect':
msgArea.htmlText +="Inside Connect";
msgArea.htmlText += "<b>Server connection establed!</b>";
break;
case 'close':
msgArea.htmlText +="Inside Close";
msgArea.htmlText += "<b>Server connection lost</b>";
break;
}
}
function msgGO()
{
msgArea.htmlText +="Inside msgGO";
if (inputMsg.htmlText != "")
{
msgArea.htmlText +="Inside msgGo2";
mySocket.send(inputMsg.htmlText+"\n");
inputMsg.htmlText = "";
}
}
function realsedButton(evt:MouseEvent)
{
msgArea.htmlText +="Inside ReleasedButton";
msgGO();
}我做了很多测试,我会试着把所有的东西都整理一下。
如果从Flash直接运行( mySocket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,,ctrl+enter),并且套接字服务器是脱机,权限被设置为Network,并且行 securityHandler)是注释掉的
产出如下:
错误#2044未处理的安全error.txt =错误#2048安全沙箱违规文件/G既要/flash%20 20Stuff/socketClientNetwork.swf不能从localhost:9999在socketClientNetwork_fla::maintimeline/frame 1{}上加载数据
如果从SWF运行,套接字服务器是脱机,并且权限设置为Network,并且行(从上面)没有注释掉,则输出如下:
如果从直接运行 (ctrl+enter),并且套接字服务器是脱机,并且权限设置为Local,则注释掉行
产出如下:
错误#2044未处理的安全error.txt =错误#2048安全沙箱违规文件/G既要/flash%20 20Stuff/socketClientLocal.swf不能从localhost:9999在socketClientLocal.swf::maintimeline/Fra1{}上加载数据。
如果从SWF和套接字服务器运行,而套接字服务器是脱机,权限设置为Local,则行(如前所述)为未注释
SWF ::在线::本地::注释
在线:本地::未评论
SWF::Online::Network::注释
在线::网络::未评论
发布于 2012-12-23 00:22:16
您必须将文件系统上的swf移动到本地web服务器的文档根文件夹或其中的子文件夹,然后键入浏览器地址栏:
http://localhost/socketClientLocal.swf而不是
file:///G|/flash%20Stuff/socketClientLocal.swf此外,您还必须创建一个名为crossdomain.xml的所谓“套接字策略文件”
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="localhost" toports="*"/>
</cross-domain-policy>在connect()上,Flash首先尝试加载该文件。如果无法加载或设置限制访问,闪存播放机也会触发您遇到的安全错误。
Flash试图按以下顺序加载crossdomain.xml:
connect()的服务器端口843 (在本例中为localhost:843)connect()的端口(本地主机:9999)现在您有两个选择:
您会发现许多有用的信息,这里。此外,您还可以在web上找到现成的套接字策略服务器软件(用于端口843)。例如阿帕奇的服务器。提示:谷歌用于“套接字策略服务器”
祝好运!
https://stackoverflow.com/questions/14007665
复制相似问题