我有一个 Flex 客户端,它使用 Flash 二进制 (TCP) 套接字与 Java 服务器进行通信。我有一个 localhost (Apache) 服务器,它提供了一个 crossdomain.xml 文件,该文件在我测试时是完全打开的。
我的代码在启动时成功加载了策略文件。
然后我毫不费力地将套接字连接到服务器并发送消息并获得响应。到目前为止一切都很好。
但是,当我通过同一个套接字发送第二条消息时,我会暂停大约 12 秒,然后出现沙箱违规错误:Security Error: Error #2048: Security sandbox violation: file:///C:/apache_root/ttt1/ttt1.swf cannot load data from localhost:45455.
这与第一条消息成功通过的端口和套接字相同。
我尝试在每次发送之前重新加载策略文件,但得到相同的结果。
知道为什么会发生这种情况吗?我显然曾经有一个打开的 socket 。我在每次发送后刷新套接字,并且在每次读取后我也尝试这样做,但结果相同。
提前致谢
编辑:
如果我在每次调用之前重新创建套接字,我的代码就可以工作。我很难相信这是正确的,但也许我缺少一个 Socket 设置。
最佳答案
据我所知,如果您使用的是二进制套接字,crossdomain.xml 不会通过 http 加载。
如果甚至查询跨域,您是否检查过 apache 的访问日志?
您可能会通过 tcp 从 flash 获得连接,要求您的 java 服务器上的文件(不使用 http。它只是发送字符串“”或类似的字符串)。留意他们。如果您没有在 3 秒(左右)内回答他们,则 flash 会引发沙盒违规。
关于apache-flex - 第二个套接字发送上的沙箱违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1673295/