0

在 Unity3d 中加载外部数据时,我正在尝试处理丢失的网络连接。

我的应用程序从服务器提取大量数据,如果没有网络连接,应用程序应该会失败,将问题传达给用户。

我使用 WWW 类进行所有数据检索,并且也想使用 WWW 处理网络连接丢失。

我的主要问题是 WWW 类的错误属性返回:

“被拒绝,因为没有找到 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);    
                }
            }
        }

}

任何建议,将不胜感激。

4

2 回答 2

0

除非出于某种原因,您正在使用 Webplayer 构建测试您的代码,否则在与服务器的连接断开/失败时,您应该收到错误消息“Recv failure: Connection was reset”。

当使用网络播放器构建(我假设您是)时,您应该将所有“由于未找到 crossdomain.xml 策略文件而被拒绝”视为网络丢失,因为它们都应该由连接断开/失败引起。

这是因为这两种情况会导致此错误:在尝试下载跨域文件时断开与服务器的连接(我假设这是 webpayer 中的一个原因,因为我目前没有时间测试这个事实),或者客户端尝试联系的服务器没有 crossdomain.xml 文件。由于 Unity Web Player 中的安全措施,从客户端建立的任何连接都必须连接到具有有效跨域策略的服务器。

该策略的要求是试图防止人们利用漏洞来访问内部网络资源等。这在测试期间可能会很烦人,但在生产中任何时候都不应缺少跨域策略。您应该只连接到您自己的服务器,这些服务器应该已经正确设置了文件,或者其他服务器正确设置了正确的策略。

于 2013-10-30T13:50:03.140 回答
0

要检查您的设备是否已连接到网络,您可以使用以下代码:

if(Application.internetReachability == NetworkReachability.NotReachable)
{
  //your code
}
于 2014-03-10T12:05:09.163 回答