- 最后登录
- 2019-12-2
- 注册时间
- 2012-8-25
- 阅读权限
- 90
- 积分
- 34660
- 纳金币
- 38268
- 精华
- 111
|
要在WebPlayer应用下使用Socket,使用处理WWW跨域访问的办法来解决沙箱限制问题,但一直不成功,查看日志文件会发现类似以下错误信息:
复制代码
1.Platform assembly: F:UnityEditorDataManagedCrossDomainPolicyParser.dll (this message is harmless)
2.SocketPolicyClient1: Incoming GetPolicyStreamForIP
3.
4.SocketPolicyClient1: About to BeginConnect to 127.0.0.1:843
5.
6.SocketPolicyClient1: About to WaitOne
7.
8.SocketPolicyClient1: Caught exception: 由于目标计算机积极拒绝,无法连接。
原来WebPlayer的安全沙箱对Socket的影响和WWW略有不同,下午花了好几个小时解决此问题,现简单整理给大家分享一下。
Unity安装目录里自带了一个侦听843端口的小程序,当它收到一个请求的连接字符串,它会回复一个有效的套接字策略。我Windows主机下的安装路径F:UnityEditorDataToolsSocketPolicyServer,下面有个sockpol***文件,可以命令行下执行"sockpol [--all | --local | --file policy]"。。。
all对应的策略如下:
复制代码
1.<?xml version='1.0'?>
2.<cross-domain-policy>
3.<allow-access-from domain=""*"" to-ports=""*"" />
4.</cross-domain-policy>
local对应的策略如下:
复制代码
1.<?xml version='1.0'?>
2.<cross-domain-policy>
3. <allow-access-from domain=""*"" to-ports=""4500-4550"" />
4.</cross-domain-policy>
file参数可以单独指定一个自定义的策略文件。
这里需要注意一下的是,我3.5.2版本下运行sockpol***时报了个错,提示缺少“mscorlib.dll”,然后我搜到了这货把它放进去,可以正常运行程序了。
程序运行后你可以使用telnet测试一下,正常情况下命令窗口如下所示:
端口侦听后,WebPlayer应用可以正常使用了,使用Security.PrefetchSocketPolicy("127.0.0.1", 843, 3000)测试返回值为true。
最后还需要注意一点的是,如果自定义了安全策略文件,除了一些Unity不支持的标记以外,如<allow-http-request-headers-from domain>和<site-controlpermitted-cross-domain-policies>,其它用于套接字策略的格式和Flash播放器使用的是相同的,WebPlayer只支持"*"作为有效的域值设置,"to-ports"设置是必须的。
|
-
总评分: 纳金币 + 2
查看全部评分
|