flex – 为什么在这种情况下,Flash Player会发生沙盒错误?
连接到Java(1.5)服务器上的Socket后,我会收到一个Flex 3沙盒错误#2048。服务器代码都是我的,即不在Apache下运行。 Flash Player 10.0 r32。
顺序如下: 1 Java服务器启动,侦听端口843的策略文件请求,端口45455侦听我的其他请求。 2由Apache服务的Flex客户端(尽管我从文件系统运行时获得相同的结果),主机上的套接字连接:45455。 3 Flash Player从端口843请求策略文件。这是新安全设置查找主文件的标准行为。无论是否指定了不同的策略文件,都会发生。 4我从Java通过端口843提供以下XML: <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="all"/> <allow-access-from domain="*" to-ports="*" secure="false"/> </cross-domain-policy> 5播放器将以下内容写入调试策略日志… OK: Root-level SWF loaded: http://localhost/bst/BasicSocketTest.swf OK: Searching for <allow-access-from> in policy files to authorize data loading from resource at xmlsocket://192.168.2.3:45455 by requestor from http://localhost/bst/BasicSocketTest.swf OK: Policy file accepted: xmlsocket://192.168.2.3:843 OK: Request for resource at xmlsocket://192.168.2.3:45455 by requestor from http://localhost/bst/BasicSocketTest.swf is permitted due to policy file at xmlsocket://192.168.2.3:843 6我使用writeUTFBytes()和flush()(这是我自己的自制消息协议,并在每端完成正确处理),从客户端向端口45455发送短信。 REG/REGISTER;simon;Si 7端口45455上的Java服务器线程侦听响应 REG:0/REGISTER:SUCCESS;simon;Si 8 Flex客户端接收到一个ProgressEvent,并且绑定到套接字的事件侦听器被调用。我处理消息(将其写入屏幕上的文本框) 9 Flash Player会抛出2048个沙盒错误,插座断开!这是收到消息并成功处理之后。其实大约是12秒钟后。没有任何其他工作通过插座。 我已经尝试在Flex客户端中明确加载一个调用Security.loadPolicyFile()的策略文件,但新玩家安全性的现实是基本上被忽略。步骤是在套接字i / o操作发生之前策略请求将不会被发送。此时,播放器始终前往端口843首先查找主策略文件。如果找到一个,它是宽容的,它不再进一步。 我尝试了各种替代方法终止策略文件和策略文件内容,包括故意的错误,只是为了看Flash Player是否清醒。 我看不出有什么理由要投掷2048。我准确地在指定的主安全端口上提供套接字策略文件,播放器本身记录为正确。套接字然后成功地发送和接收来自服务器的消息,其内容可用于我的代码。 有谁有任何线索为什么会发生这种情况? Flash Player bug? 附:请不要告诉我使用BlazeDS或LCDS或者Granite,或者别的东西作为服务器,我正在寻找解决这个问题的方法,而不是重新设计。请不要让我使用XMLSocket,而是尝试并得到完全相同的结果。我选择了我的架构仔细和故意,我想要一个二进制插槽。 编辑 Error #2048: Security sandbox violation: http://localhost/bst/BasicSocketTest.swf cannot load data from 192.168.2.3:45455. 我有一个剥离的测试客户端,它具有每个套接字事件的处理程序,并向屏幕输出消息。这是它显示的: RequestPolicy: 192.168.2.3:843 Create Socket: 192.168.2.3:45455 Connect: [Event type="connect" bubbles=false cancelable=false eventPhase=2] Sending: REG/REGISTER;simon.palmer@gmail.com;Si Receiving: REG:0/REGISTER:SUCCESS;simon.palmer@gmail.com;Si/ Close: [Event type="close" bubbles=false cancelable=false eventPhase=2] Error #2048: Security sandbox violation: http://localhost/bst/BasicSocketTest.swf cannot load data from 192.168.2.3:45455. 在成功接收到服务器的响应后,关闭事件将立即触发,但是在大约20秒之后,错误#2048才会出现。如果我在关闭后尝试发送另一个消息,但在错误之前,Flash Player会引发一个无效的套接字异常。 我有这个logged a bug at Adobe。 如果任何人有兴趣,我可以提供客户端和服务器的完整源代码。 解决方法
我一直在本地进行测试,一切似乎都正常工作,直到套接字关闭。插座不应该闭合吗?消息发送到Flex客户端后,Java代码可以:
_in.close(); _out.close(); _socket.close(); 然后,Flex客户端下次尝试与套接字通信时,会收到沙盒违规。如果再次创建新的套接字连接,则发送和接收工作正常,然后关闭。但是在一分钟之后,我又遇到了沙盒违例。我想知道Flash是否正在尝试ping套接字,并且由于它关闭它会引发沙盒违规? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |