socket服务器解决843端口策略文件的问题
来源:互联网 发布:零件设计软件手机 编辑:程序博客网 时间:2024/06/01 09:00
记录一下帮人看问题的时候踩的一个坑。
flash player在进行网络请求时需要先确认是否配置策略文件,如果加载不到或没有对应权限,则会报错安全沙箱错误。
如果是http服务器,则要在根目录下配置crossdomain.xml文件。若需要修改策略文件加载地址,则对应client代码为Security.loadPolicyFile(“ http://www.xxx.com/crossdomain.xml ”)
这次主要是测试自建的socket服务器。用AIR写了一个简易的服务器观察过程。
Server: 监听了843端口和一个自定义的端口(13468)
Client 使用socket连接。测试时不能在flash中测试运行,应发布swf后,直接在flash player环境中运行。
在调用socket.connect后,服务端首先在843端口收到一条字符串信息 <policy-file-request/>
若不处理或返回内容错误,则会在自定义端口再次收到<policy-file-request/>
若仍不处理或返回错误,则client报错 SecurityError #2048
这个过程是在客户端发出请求时flash player 自动帮我们完成的。只有在收到了正确的策略文件信息后,客户端才会响应Event.CONNECT事件。
经过学习后知道client对应的策略检查代码为:
Security.loadPolicyFile(“xmlsocket://www.xxx.com:port”)
可以注意到,这个策略文件的数据传输方式是基于xmlsocket的。
坑就在这里!
xmlsocket的数据传输需要在数据的末尾检测到'\0'(也就是ASCII码的0),才会认为数据接收结束。
AS3在字符串里写"\0"会直接解析成"0",也就失去了原本的意义。
只有写 var str:String = "xxxxx" + String.fromCharCode(0); 时,才是正确的在字符串结尾插入了一个ASCII码为0的字符
但!是!
悲催的在字符串转换成二进制的时候,这个好不容易加上的'\0'被自动忽略掉了。
于是才有了一下午的测试失败。因为在客户端那边,一直没收到这个结束字符,一直认为收到的数据不完整,策略文件配置自然不会生效。
来个原理测试图:
最终的解决办法,就是在843端口接到请求后,返回的数据转换为二进制以后,手动在数据的末尾加一个字节的0
好吧,最后处理起来确实很简单,但最重要的还是知道坑在哪,为什么是坑,对吧?
- socket服务器解决843端口策略文件的问题
- 解决socket服务器(chatserver)的问题
- [转] 解决socket端口被占用的问题
- 服务器基础 tomcat端口被占用问题的解决
- Flash Socket协议获取843端口策略文件_压力测试
- flex解决跨域问题的策略文件的写法
- Flex解决跨域问题的策略文件的写法
- 解决从服务器下载文件 的问题
- tcp服务器如何解决端口号问题
- 彻彻底底的解决Flex,as3 缺乏策略文件权限 问题
- socket的accept函数解析以及服务器和多个客户端的端口问题
- socket的accept函数解析以及服务器和多个客户端的端口问题
- python---项目2-查找服务器是否开启ftp的21端口,socket,os,sys,端口识别,文件操作
- tomcat 服务器抛出socket异常“文件打开太多”的问题
- [教程] Flash Socket通信的安全策略问题 843端口
- Flash Socket通信的安全策略问题 843端口
- Flash Socket通信的安全策略问题 843端口
- 解决在epoll中accept接收端口会漏处理的问题. 直到新的socket消息到达,epoll_wait才响应去接收socket端口数据的问题
- flex布局(2)
- Abbreviation: i.e. & e.g. & etc & a.k.a
- 水仙花数
- VMware Workstation Pro新建虚拟机的操作步骤
- 触发浏览器重绘的操作?
- socket服务器解决843端口策略文件的问题
- 基于vue.js重写Cnodejs.org社区的webapp
- Session 共享方案
- 远程连接并操作redis
- GitHub 上排名前 100 的 Android 开源库介绍
- Android处理6.0获取权限问题的第三方框架------开源项目-Easypermissions
- 表格模型事件Java
- linux下mysql定时全量备份
- postgresql 切换xlog日志