http://www.unityin.com/2012/02/unity-web-socket-security!/
Unity中编写的Socket,如果要在Web平台使用,可能会遇到Socket Security的问题,这是因为Unity在3.0後加入了Security Sandbox,在Socket连接前会先对Port843发送一个请求封包,当收到该封包正确回应後,才可正常使用Socket,否则会显示以下异常:
System.Security.SecurityException: Unable to connect, as no valid crossdomain policy was found.
解决步骤:
Step1:
请先至安装Unity的目录底下取得官方提供的 Socket Policy Server,以供接收向 Port 843 传递的请求封包,并且给予适当的回应。
X:Program FilesUnityEditorDataToolsSocketPolicyServersockpol.exe
Step2:
Windows:请开启「命令提示字元」,并切换到 Step1 的目录,键入sockpol –all即可执行Socket Policy Server。Unity3D教程手册
Linux(ubuntu):请开启「终端机」,并切换到档案所在位置,键入sudo mono sockpol –all即可执行Socket Policy Server。
注:–all 为socket policy server的参数,代表的好像是监听全部的Port,其它参数可参考Step1 目录下的 sockpol.cs。
Step3:
上述两个步骤完成後,接着就是在Socket连接之前,使用Security.PrefetchSocketPolicy( ip, port ); 这个 API,即可正常在Web平台上使用Socket。
注:参数 ip 即为Socket Policy Server开启所在的ip位址,参数port即为843。
注:若为跨平台的制作专案,请将此API依照平台利用define隔开,避免其他平台执行时的异常问题。Unity3D教程手册
原文作者:BricL
曾任职台湾某游戏公司研发Game Engine,为书籍“OGRE入门指南”译者,专攻Rendering技术与游戏开发,目前为独立团队CocosPlay主程式