纳金网

标题: Socket的安全策略处理 [打印本页]

作者: 狂风大尉    时间: 2014-6-23 01:44
标题: Socket的安全策略处理

要在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"设置是必须的。

作者: hyui    时间: 2014-6-23 02:33
Good to know!
作者: jacob    时间: 2014-6-23 09:40

Good to know!




欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5