-1

我刚刚在flash中启动了一个项目,但是它无法启动XMLSocket。

我的代码:

import Network.CommunicationBootstrap;

var network:CommunicationBootstrap = new CommunicationBootstrap();
network.start("127.0.0.1", 30000);

封装网络类 CommunicationBootstrap:

package Network {
import flash.net.XMLSocket;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;

public class CommunicationBootstrap {

    private var socket:XMLSocket = new XMLSocket();

    public function CommunicationBootstrap() {
        socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
        socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
    }

    public function start(ip:String, port:int):void {
        this.socket.connect(ip, port);

        trace("Testing this out!");
    }

    private function ioErrorHandler(event:IOErrorEvent):void {
        trace("ioErrorHandler: " + event);
    }

    private function securityErrorHandler(event:SecurityErrorEvent):void {
        trace("securityErrorHandler: " + event);
    }

}

}

我的错误是: ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2031: Socket Error. URL: 127.0.0.1"] securityErrorHandler: [SecurityErrorEvent type="securityError" bubbles =false cancelable=false eventPhase=2 text="错误 #2048: 安全沙箱违规:file:///C|/Users/iufrs/Documents/AS3/1/Torn.swf 无法从 127.0.0.1:30000 加载数据。 "]

(通过跟踪和 2 个事件获得)

4

1 回答 1

1

这是(如消息提示的)由于您的 swf 正在运行的沙箱。

文档

本地文件描述使用文件引用的任何文件:协议

这就是你在这里所做的。

更远:

本地文件系统沙箱 - 出于安全目的,默认情况下,Flash Player 将所有本地 SWF 文件和资源放置在本地文件系统沙箱中。在这个沙箱中,SWF 文件可以读取本地文件(例如,通过使用 URLLoader 类),但它们无法以任何方式与网络通信。这向用户保证本地数据不会泄露到网络或以其他方式不当共享

这就是导致您看到错误的原因。

如果您希望您的 swf 由 web 服务器托管,那么您应该确保 swf 可以从运行在 上的 web 服务器加载127.0.0.1,并且您应该通过 http 加载它,例如http://127.0.0.1/YourSwf.swf

如果你想从文件系统运行你的 sef,你需要编译它以在“local-with-networking”沙箱中运行,链接解释了如何。

.

于 2013-07-26T16:12:37.167 回答