无法使用 AS3 连接到 Java 服务器

Posted

技术标签:

【中文标题】无法使用 AS3 连接到 Java 服务器【英文标题】:Impossibility to connect to a java server with AS3 【发布时间】:2011-07-15 06:57:54 【问题描述】:

我在使用 AS3 中的 XMLSocket 脚本时遇到问题。我有一个 java 服务器,我正在尝试发送 XML 数据,但服务器没有收到任何内容。最令人惊讶的是我的脚本一个月前运行良好,现在我的 IOError 监听器返回我:

“错误 #2031:套接字错误。URL:127.0.0.1 在测试() 在 Client_fla::MainTimeline/frame1()"

还有我的 SecurityError 监听器:

“错误 #2048:违反安全沙箱:file:///C|/Documents%20and%20Settings/Zeph/Bureau/Client.swf 无法从 127.0.0.1:18000 加载数据。 在测试() 在 Client_fla::MainTimeline/frame1()"

我尝试更改 IP,我尝试在另一台计算机上,我尝试拉取我的脚本的旧版本,它没有改变,没有结果。

我只是不明白为什么它停止了这样的工作。这是我的脚本:

package


    import flash.net.XMLSocket;
    import flash.events.*;
    import flash.display.MovieClip;

    public class test extends MovieClip 
    

        public function test()
        
            trace("pouet");
            var xmlsock:XMLSocket = new XMLSocket(); 
            xmlsock.connect("127.0.0.1", 18000);
            var xmlFormattedData = new XML('<message pseudo="Nix" value="Coucou !"/>'); 
            xmlsock.send(xmlFormattedData);
            xmlsock.addEventListener(DataEvent.DATA, onData);
            xmlsock.addEventListener(IOErrorEvent.IO_ERROR, ioerror);
            xmlsock.addEventListener(SecurityErrorEvent.SECURITY_ERROR, secuerror);
            xmlsock.send(xmlFormattedData);

        

        private function onData(event:DataEvent):void 
         
            trace("[" + event.type + "] " + event.data); 
        


        private function ioerror(event:IOErrorEvent):void 
         
        trace(event);
        

        private function secuerror(event:SecurityErrorEvent):void 
         
        trace(event);
        

    


我对此很生气,有人知道吗?

感谢阅读!

【问题讨论】:

【参考方案1】:

错误表明,您正在从本地文件系统运行 Flash 应用程序,并且该应用程序想要(向您的 java 服务器)发出网络请求。

默认情况下不允许这样做。您可以执行以下两项操作之一:

在您的 Flash 播放器中更新您的全局安全设置(右键单击、高级设置、全局安全设置,然后将 Flash 文件或整个文件夹设置为允许进行网络请求)

从网络服务器运行您的 Flash 应用程序(并确保 java 服务器上有一个 crossdomain.xml)。

【讨论】:

我使用 wamp 在服务器(使用跨域)上测试我的应用程序,并且它可以正常工作。非常感谢!【参考方案2】:

正如您的错误所示,您遇到了沙盒安全违规问题。这意味着 Flash 不允许来自其自身以外的应用程序域的资源。基本上有两个修复,一个比另一个简单得多:

    阅读如何创建和加载crossdomain xml。这只是您正在运行的闪存应用程序读取的服务器上的“策略”。正确设置可能很棘手,但这是普遍接受的路线。

    在您的输出设置中,在“本地播放安全”下,您可以检查“访问网络文件”,而不是“仅访问本地文件” - 并快速解决您的问题。

希望有帮助!

【讨论】:

我尝试了您的两种解决方案,但都没有奏效。我写了一个跨域包含 cross-domain-policy> (我在 http: 之后放了一个空格,因为该站点自动创建了一个链接)并将其放在我的 .swf 和来源所在的文件夹中,但同样的消息即将到来。我做对了吗? 是的 - 就像我说的,设置起来可能有点棘手。其他事情:我通常也会实现 DTD,例如:。另一件事 - xml 的位置很重要。您应该将其放置在您网站的根级别。将它放在其他地方会使其被忽略。 嘿嘿 - 刚刚发现这篇关于设置套接字策略的详细文章:adobe.com/devnet/flashplayer/articles/…。它可能只是一个 crossdomain.xml 修复,但可能需要更多,具体取决于您的配置。

以上是关于无法使用 AS3 连接到 Java 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Java 邮件无法使用 tls 或 ssl 连接到 smtp

为啥客户端无法连接到 Java Websocket 服务器?

python客户端无法连接到java服务器

无法用java连接到sql server

无法使用 Asmack 连接到我的 ejabberd 服务器

无法从 java 应用程序连接到 sqlserver