C++与Flex之间socket通信policy file request解决方案
C++winsocket服务端,Flex as3客户端。服务端Bind绑定IP127.0.0.1端口2020,在Flex中使用Socket.connect向服务器发起链接。当Flex在本地运行的时候能链接成功, 但是通过域名访问时出现Security错误, Error #2048
。并且在连接时, 服务端收到客户端发来的消息<policy-file-request/>
消息。
尝试解决:
上google搜索了若干资料,我看了良久也一知半解。
出现这个问题的原因是FlashPlayer有一个安全沙箱机制
。本地运行swf时,flashPlayer默认的安全策略是可以跨预访问的,可以查看Security.sandboxType属性值为localTrusted。然而在使用IP访问swf文件时,flashPlayer会认为这个文件是不安全的此时可以查看
Security.sandboxType的属性值为remote。此时需要在服务端放置策略文件,flashPlayer才会让swf链接到此服务器。
若干人的博客上都说需要名为crossdomain.xml
的文件放置到服务端HTTP的根目录下。文件内容为
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="2020" />
</cross-domain-policy>
我这么做了,但是没有任何效果。(我能确定策略文件被访问到了,因为文件中出现语法错误的时候Flex调试信息中还会报出警告。)于是我猜想这个方法也许是解决不能访问远程HTTP文件的的问题,而socket通信需要另外的方法。
然后在CSDN论坛上发现有人用JavaSocket和Flex通信出现同样问题,解决方案是服务端收到
<policy-file-request/>消息时,直接向客户端发送一条消息,内容就是上面的策略文件的xml
。我仿照做了,依然无效>_<
char szPolicy[1024] = "";
strcat_s(szPolicy, 1024, "<?xml version='1.0'?>");
strcat_s(szPolicy, 1024, "<cross-domain-policy>");
strcat_s(szPolicy, 1024, "<site-control permitted-cross-domain-policies='all'/>");
strcat_s(szPolicy, 1024, "<allow-access-from domain='*' to-ports='2020'/>");
strcat_s(szPolicy, 1024, "</cross-domain-policy>\0");
sockClient = m_sockListener.Accept(&addrClient);
if (sockClient.IsInvalid())
{
// accept failed
相关文档:
上篇文章说到linux需要itoa函数,下面我就提供一份跨平台的itoa函数。
//return the length of result string. support only 10 radix for easy use and better performance
int my_itoa(int val, char* buf)
{
const int radix = 10;
char* p;
int a;&nbs ......
Dreamweaver MX 2004 或其他文本编辑器(例如记事本),用来编辑XML和ActionScript代码
如同所有的XML语言一样,在MXML中,标签和属性都是区分大小写的;
所有的属性值必须用双引号(")或单引号(包含
所有的标签必须是闭合的。没有子标签的标签可以以斜杠直接结束,而无需额外的结束标签:
<mx:Label ......
一、C++服务器端
(用的是Visual Studio 2008(05,03的应该也可以,VC++的可能需要稍微改动))
代码如下:
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
void main(){ ......
本系列文章主要介绍了关于Flex与.NET结合开发中的一些互操作性,包括网络通信、数据加载、数据传输、文件传输、以及应用于Flex与.NET协作开发的通信网关开源项目FluorineFx的相关知识点。
开源项目FluorineFx就是专门针对.NET平台与Flex通信提供的AMF协议通信网关,我们可以通过FluorineFx很方便 ......