在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);
}
}
}
}
任何建议都将不胜感激。
答案 0 :(得分:0)
除非由于某种原因您在使用Webplayer构建测试代码,否则如果连接到服务器的连接断开/失败,您应该收到错误消息“Recv failure:Connection was reset”。
当使用网络播放器构建(我假设你是)时,你应该将所有“拒绝因为没有找到crossdomain.xml策略文件”视为网络丢失,因为它们都应该由连接断开/失败引起。
这是因为这两个场景导致此错误:在尝试下载crossdomains文件时删除与服务器的连接(我假设这是webpayer中的原因,因为我目前没有时间测试这个事实),或客户端尝试联系的服务器没有crossdomain.xml文件。由于Unity Web Player中的安全措施,从客户端建立的任何连接必须是具有有效跨域策略的服务器。
该策略的要求是试图阻止人们利用漏洞获取对内部网络资源等的访问权。这在测试过程中可能会令人讨厌,但在生产过程中,如果丢失的跨域策略成为问题,则不会产生任何问题。您应该只连接到您自己的服务器,这些服务器应该正确设置所述文件或正确设置了正确策略的其他服务器。
答案 1 :(得分:0)
检查您的设备是否已连接到您可以在代码下方使用的网络:
if(Application.internetReachability == NetworkReachability.NotReachable)
{
//your code
}