2013-10-30 80 views
0

我試圖處理丟失網絡連接,在Unity3d加載外部數據時。Unity3d WWW和網絡連接錯誤

我的應用程序拉大量的數據從一臺服務器,並沒有一個NetConnection的應用程序出現故障,通信的問題給用戶。

我使用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);  
       } 
      } 
     } 

} 

任何建議,將不勝感激。

回答

0

除非出於某種原因,你在使用Web播放器打造你應該得到的錯誤信息測試代碼「RECV失敗:連接被重置」中的下降/失敗的連接到服務器的事件。當使用網絡播放器版本(我假設你是)時,你應該把所有「拒絕,因爲沒有找到crossdomain.xml策略文件」作爲網絡損失,因爲它們都應該由丟失/失敗的連接引起。

這是由於這兩個方案導致此錯誤的事實:在嘗試下載跨域文件時丟棄與服務器的連接(我假設這是webpayer中的原因,因爲我目前沒有時間來測試此事實),或者客戶端嘗試聯繫的服務器沒有crossdomain.xml文件。由於Unity Web Player中的安全措施,從客戶端進行的任何連接都必須連接到具有有效的跨站點策略的服務器。

該策略的要求是試圖防止人們利用漏洞訪問內部網絡資源等。這可能會在測試過程中令人討厭,但是在生產過程中,如果缺少跨域策略,那麼在任何時候都不應該成爲問題。你應該只連接到你自己的服務器上,這些服務器應該說有正確的設置文件或其他正確設置了正確策略的服務器。

+0

謝謝您的答覆。我正在從編輯器進行測試,並且我的構建設置是爲網頁播放器設置的。我簡單地從電腦中拉出電纜,然後在Unity編輯器中按播放。我從來沒有在我的測試中看到「Recv failure:Connection was reset」。我不明白在這種情況下,某個安全錯誤消息是如何正確迴應WWW錯誤的?也許你可以詳細說明一下?我完全理解crossdomain.xml文件的用途。 – mat

+0

從信息的角度來看,它可能不是正確的錯誤響應。然而這是幕後技術發生的事情。如果沒有連接到服務器,它將無法下載交叉域名文件,這是處理WWW Web版本請求的第一步。您也可以嘗試將構建設置更改爲獨立模式並重新運行測試,您應該收到Recv錯誤,然後確認它不是團結中的任何時髦。 –

0

檢查您的設備是否連接到您可以使用下面的代碼的網絡:

if(Application.internetReachability == NetworkReachability.NotReachable) 
{ 
    //your code 
}