在Unity3d中加载外部数据时,我正在尝试处理丢失的网络连接。
我的应用程序从服务器中提取了大量数据,如果没有网络连接,应用程序将失败,并将问题传达给用户。
我将WWW类用于所有数据检索,并且也想使用WWW处理网络连接的丢失。
我的主要问题是WWW类的error属性返回:
“被拒绝,因为未找到crossdomain.xml策略文件”
当我从计算机上拔出网络电缆时。
我无法弄清楚如何将丢失的网络连接与所需的丢失的crossdomain.xml文件区分开,因为它们是完全不同的问题。
我不想将所有“跨域策略错误”“解释”为网络丢失,因为它们可能不是。
我的数据加载代码如下所示:
public class SendAndLoadData : MonoBehaviour
{
public delegate void SuccessEventHandler(string data);
public delegate void ErrorEventHandler(string msg);
public void SendData(string url, SuccessEventHandler onSuccess, ErrorEventHandler onError) {
StartCoroutine(LoadRemoteData(url,onSuccess,onError));
}
IEnumerator LoadRemoteData(string path, SuccessEventHandler onSuccess, ErrorEventHandler onError)
{
var _www = new WWW(path);
yield return _www;
if (_www.error != null)
{
if ( onError != null ) {
onError(_www.error);
}
}
else
{
var data = _www.text;
if ( onSuccess != null ) {
onSuccess(data);
}
}
}
}
任何建议,将不胜感激。
除非由于某种原因在使用Webplayer构建中测试代码,否则在与服务器的连接断开/失败的情况下,应该会收到错误消息“ Recv failure:Connection was reset”。
使用网络播放器版本(我假设您是)时,应将所有“已拒绝,因为未找到crossdomain.xml策略文件”视为网络丢失,因为它们都应由断开/失败的连接引起。
这是由于以下两种情况导致此错误:在尝试下载跨域文件时断开与服务器的连接(我假设这是webpayer的原因,因为我目前没有时间测试此事实),或者客户端尝试联系的服务器没有crossdomain.xml文件。由于Unity Web Player中的安全措施,从客户端建立的任何连接都必须与具有有效跨域策略的服务器建立连接。
该策略的要求是试图防止人们利用漏洞获得对内部网络资源等的访问权。这在测试过程中可能会很烦人,但是在生产中的任何时候都不应考虑缺少跨域策略。您应该只连接到自己的服务器,这些服务器应该正确设置了所说的文件,或者连接了其他使用正确的策略正确设置的服务器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句