unity3.0版本后的webplayer加入了security sandbox特性,使用socket连接之前,会向默认端口843发送策略文件请求信息: ,如果返回信息不正确或者端口不在允许范围内,socket连接失败并且报以下异常:
- System.Security.SecurityException: Unable to connect, as no valid crossdomain policy was found
解决以上问题需要进行两步处理:
第一步:
在客户端socket连接之前调用以下API函数 Security.PrefetchSocketPolicy(server,port)
第二步:
开启服务器之前运行sockpol.exe,位置为unity安装目录Unity\Editor\Data\Tools\SocketPolicyServer,作用是向客户端返回策略文件信息,运行时有三个命令:--all表示接受所有port范围,--range表示接收范围是4500-4550,可以在源代码中进行修改,--file表示读取本地文件,后面跟文件路径,可以自定义port范围,自定义文件格式如下:
- <?xml version="1.0"?>
- <cross-domain-policy>
- <allow-access-from domain="*" to-ports="8000" />
- </cross-domain-policy>
经局域网测试,连接正常。