Flex Socket 与 C++ 通讯 --- 安全沙箱问题解决
来源:互联网 发布:公司网络一会断一会好 编辑:程序博客网 时间:2024/05/21 08:30
最近一个项目的客户端要改成Flex,使用Socket与C++通讯时遇到了安全沙箱问题,这是我的解决方法;
1):策略文件与主套接字在同一端口,只需调用 Socket.connect()
或 XMLSocket.connect()
方法;
2):策略文件与主套接字在不同端口,需使用特殊的“xmlsocket”
语法调用 Security.loadPolicyFile()
方法,如下所示:
Security.loadPolicyFile("xmlsocket://server.com:2525");
先调用 Security.loadPolicyFile()
方法,然后再调用 Socket.connect()
或 XMLSocket.connect()
方法。
测试代码:使用同一端口
- #include <winsock2.h>
- #include <windows.h>
- #include <iostream>
- using namespace std;
- #pragma comment(lib,"ws2_32.lib")
- void main()
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- short port=1800;//端口号
- wVersionRequested = MAKEWORD( 1, 1 );
- err = WSAStartup( wVersionRequested, &wsaData );//初始化套接字
- if ( err != 0 )
- {
- return;
- }
- if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
- {
- WSACleanup( );
- return;
- }
- SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字
- SOCKET sockConn;//用来和客户端通信的套接字
- SOCKADDR_IN addrSrv;//用来和客户端通信的套接字地址
- addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
- addrSrv.sin_family=AF_INET;
- addrSrv.sin_port=htons(port);
- bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//绑定端口
- listen(sockSrv,5);//侦听
- printf("Server %d is listening....../n",port);
- SOCKADDR_IN addrClient;
- int len=sizeof(SOCKADDR);
- char buf[4096];//接收的数据
- char rbuf[100]=
- "<cross-domain-policy> "
- "<allow-access-from domain=/"*/" to-ports=/"*/"/>"
- "</cross-domain-policy> ";//套接字策略文件
- while(1)
- {
- //接受连接
- sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
- printf("Accept connection from %s/n",inet_ntoa(addrClient.sin_addr));
- recv:
- //接收数据
- int bytes;
- if((bytes=recv(sockConn,buf,sizeof(buf),0))==SOCKET_ERROR)
- {
- printf("接收数据失败!/n");
- exit(-1);
- }
- buf[bytes]='/0';
- printf("Message from %s: %s/n",inet_ntoa(addrClient.sin_addr),buf);
- if (0 == strcmp(buf,"<policy-file-request/>"))
- {
- //发送数据
- if(send(sockConn,rbuf,strlen(rbuf)+1,0)==SOCKET_ERROR)
- {
- printf("发送数据失败!");
- exit(-1);
- }
- printf("Message to %s: %s/n",inet_ntoa(addrClient.sin_addr),rbuf);
- }
- else
- {
- //Echo
- if(send(sockConn,buf,strlen(buf)+1,0)==SOCKET_ERROR)
- {
- printf("发送数据失败!");
- exit(-1);
- }
- printf("Message to %s: %s/n",inet_ntoa(addrClient.sin_addr),buf);
- goto recv;
- }
- //清理套接字占用的资源
- closesocket(sockConn);
- }
- }
无论是哪种情况,服务器均必须等待客户端的第一次传输之后再决定是发送策略文件还是建立主连接。当 Flash Player 请求策略文件时,它始终会在建立连接后传输以下字符串:
<policy-file-request/>
服务器收到此字符串后,即会传输该策略文件。程序对于策略文件请求和主连接并不会使用同一连接,因此应在传输策略文件后关闭连接。如果不关闭连接,Flash Player 将关闭策略文件连接,之后重新连接以建立主连接。
附网络资料:
1,首先检测目标服务器的843端口是否提供安全策略
2,如果1没有检测到策略,则检测actionscript是否使用了Security.loadPolicyFile(xmlsocket://)
手段提供安全策略,如果还没检测到,则使用第3步检测
3,检测目标服务器目标端口是否提供安全策略
0 0
- Flex Socket 与 C++ 通讯 --- 安全沙箱问题解决
- Flex Socket 与 C++ 通讯 --- 安全沙箱问题解决
- Flex Socket 与 C++ 通讯 --- 安全沙箱问题解决 (转)
- Flex Socket 与 C++ 通讯 --- 安全沙箱问题解决
- flash socket通讯安全沙箱问题解决(附带案例)
- Flex安全沙箱问题解决
- AS3与JAVA socket通讯的 安全沙箱问题
- flex的Socket通讯的安全沙箱的问题全解析
- Socket通讯协议与socket安全
- Flex Socket 安全沙箱问题
- flex通过socket json与后台通讯
- Flex 与Python之间Socket通讯
- AS3与JAVA socket通讯的 安全沙箱问题 终于解决了
- flex的Socket通讯沙箱和安全策略问题
- flex通过socket与服务器端进行通信时的安全沙箱问题终极解决方案
- flex安全沙箱,跨域访问图片资源问题解决
- Flex Socket 与 C# 通信
- 关于Flex\AS3 Socket 通信 安全沙箱的问题
- 请求转发和重定向
- 灰度图像--频域滤波 概论
- linux小命令积累
- 大数据时代的机器学习热点——国际机器学习大会ICML2013参会感想
- <s:token/>防止表单重复提交
- Flex Socket 与 C++ 通讯 --- 安全沙箱问题解决
- svn出错:Error: File or directory '.' is out of date; try updating(
- CGI和FastCGI的区别
- Android:最火的快速开发框架XUtils
- 被覆写的方法不能为private
- 关于pdf文件如何合并的方法
- 将定制的java包引入到android系统中
- 使用Proxy和InvocationHandler实现代理器模式 实现spring aop
- C++与Flex之间socket通信policy-file-request解决方案