2012-06-11 116 views
4

服务策略文件闪存二进制套接字连接失败我想在Flash中设置一个二进制套接字连接到服务器以外的其他服务器。继Adobe的套接字策略文件的文档,我服务,从目标服务器的843端口此文件:从服务策略文件从非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的样本策略文件服务器,结果。

+2

+1好留言/研究 – Nate

+1

请添加您的结果并将其标记为已回答,以便其他人可以看到您的解决方案/结果! :) – Nate

回答

1

使用网络分析工具后,我发现答案:原来,即使经过了3秒的超时,Flash仍然不会从失败的请求中关闭套接字到843。

套接字需要几秒钟才能完全关闭。如果您在此期间尝试重新建立连接,即使您使用的是不同的浏览器窗口,也会失败。