我一直在使用 Flash 套接字并在 C/Linux 中设置了服务器。我无法通过策略文件请求部分。我已经看过 SO 上的其他帖子并检查了 Adobe 的网站,但我仍然遇到一些问题。
在我接受连接后,在我的服务器上,我得到了<policy-file-request/>.
我正在使用以下 XML 策略文件。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
我只是将整个文件放入一个 char 数组中,然后通过我收到请求的同一端口将其写出(我没有使用 843,而是使用自定义端口)。我读过它应该以零字节结尾(这是否意味着 NULL 或 '\0' ?)。我似乎无法通过这部分。
在我的客户端,我有一个套接字事件侦听器,例如
sock.addEventListener(ProgressEvent.SOCKET_DATA, sockFunc);
但该事件永远不会触发。
使问题更加复杂的是,Chrome 似乎不喜欢我使用 Flash 调试,当我使用 IE 或 FF 时,我的服务器只会阻止 recv 并且永远不会获取<policy-file-request/>
. 我猜在 IE 和 FF 上它会尝试端口 843 然后就放弃了?尝试通过自定义端口发送策略文件是不好的做法吗?
任何帮助将不胜感激。我真的被困在这里:(
编辑:通过在末尾添加一个零字节,我的服务器现在接受连接,读取策略请求,跨套接字写入策略文件,然后再次接受并阻塞 recv。接受应该是阻塞的,因为我现在只尝试连接一个客户端。客户端是否假设在正确接收策略文件后重新连接新的文件描述符?在客户端上,我正在尝试使用
sock.writeUTFBytes("Hello");
sock.flush();
但显然它永远不会在那里,因为 recv 被阻塞了。