我正在尝试将Flash中的二进制套接字连接设置为服务于swf的服务器之外的服务器。根据Adobe关于套接字策略文件的文档,我从目标服务器的843端口提供此文件:
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.mysite.com -->
<cross-domain-policy>
<allow-access-from domain="*" to-ports="6666" />
</cross-domain-policy>
然后我使用以下AS3代码连接到6666端口:
sock.addEventListener(Event.CLOSE, closeHandler);
sock.addEventListener(Event.CONNECT, connectHandler);
sock.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
sock.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
sock.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
sock.connect('myserver', 6666);
这完美无缺。但是当我尝试从843以外的端口提供策略文件时,事情会变得很丑陋。如果我将策略文件服务器设置为侦听端口6669,并在尝试连接之前更改我的Flash代码添加此调用:
Security.loadPolicyFile("xmlsocket://myserver:6669");
..然后连接只能工作大约一半的时间,如果没有,我将收到安全错误#2048。我检查了这些实例,策略文件服务器甚至没有收到客户端返回xml文件的请求。
从843或6669提供服务时,服务器代码完全相同。我检查了在xml字符串后发送的空字节,我也尝试使用Adobe的示例策略文件服务器,结果相同
答案 0 :(得分:1)
使用网络分析工具后,我发现答案:即使经过3秒超时,闪存也不会将失败请求的套接字关闭到843.
套接字需要几秒钟才能完全关闭。如果您尝试在此期间重新建立连接,即使您使用的是其他浏览器窗口,也会失败。