实际项目中解决 flash 通信中的安全沙箱问题。

flash 的socket 编程不就说了,本篇旨再解决沙箱问题。

文本列出 C# PHP nodejs 为服务器端程序时出现的沙箱问题。

何为安全沙箱,请大家在百度谷歌一下!

当服务端和 flex 通信时 ”出现Security错误, Error #2048 。并且在连接时, 服务端收到客户端发来的消息<policy-file-request/> 消息。“

解决方案:

服务端收到 <policy-file-request/>消息时,直接向客户端发送一条消息,内容就是配置好策略文件 并关闭当前连接

PHPCODE:

private $flashPolicy = '<cross-domain-policy><allow-access-from domain="*" to-ports="8001" /></cross-domain-policy>';

//解决flash安全沙箱问题 if($lines[0] == "<policy-file-request/>\0")       //收到 <policy-file-request/> 时,结尾以\0结束 { $this->server->writeBuffer($this->socket, $this->flashPolicy); //写给客户端 stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR);            //重点。要关闭当前的连接,原因后面说 return false; }


C#

if (0 == strcmp("<policy-file-request/>", szRecvBuff)) { if (strlen(szPolicy) == sockClient.Send(szPolicy, strlen(szPolicy))) { printf_s("# Send policy xml string successful./n"); } else { printf_s("# Error! Send policy xml string failed./n"); } sockClient.Close(); //***重点在这里*** RemoveClient(m_vsockClients[i--]); continue; }


nodejs

flashPolicy = '<cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>';

var _headers = data.split("\r\n"); if ( /<policy-file-request.*>/.exec(_headers[0]) ) { socket.write( options.flashPolicy ); socket.end(); return; }


代码不多说,各有个的风格,步骤如上。

这样就解决了flash的沙箱问题。

祝大家好运!

你可能感兴趣的:(PHP,socket,Flash,AS)