greyhh

记录学习中的点点滴滴

导航

Unity3d webplayer连接Sokcet服务器

Posted on 2018-04-03 11:43  greyhh  阅读(189)  评论(0编辑  收藏  举报

     最近项目中用到Socket通信,过程中遇到一个问题:Socket服务器和Unity3d webplayer通信问题。简单写了一个Socket通信测试工具(https://github.com/jerryleeCP/SocketCom),发现在编辑器模式下没有任何问题,发布成webplayer就连接不上服务器。

    查找相关文档发现是Unity3d中的webplayer有一种security sandbox特性,在连接服务器时需要先连接一个843(默认)的端口并得到一个通信策略,然后才可以使用Socket连接。还好Unity官方已经为我们提供了解决方案。

    把Untiy的安装目录Editor\Data\Tools\SocketPolicyServer的socketpol.cs脚本添加到Socket服务器中,里面有已提供的通信策略:

 

   public const string AllPolicy =

@"<?xml version='1.0'?>
<cross-domain-policy>
        <allow-access-from domain=""*"" to-ports=""*"" />
</cross-domain-policy>";

  public const string LocalPolicy =

@"<?xml version='1.0'?>
<cross-domain-policy>
    <allow-access-from domain=""*"" to-ports=""4500-4550"" />
</cross-domain-policy>";

 

服务器端添加

 SocketPolicyServer sps = new SocketPolicyServer(SocketPolicyServer.AllPolicy);
            sps.Start();

WebPlayer客户端添加(默认端口:843)

Security.PrefetchSocketPolicy(Ip,Port);

测试,发现我们已经能成功的连接了

 

或者使用socketpol.exe,命令行模式启动socketpol.exe(socketpol.exe --all),然后启动socket服务器。