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

デバイスがネットワークに接続されているかどうかを確認するには、以下のコードを使用できます。

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

なんらかの理由で Webplayer ビルドを使用してコードをテストしている場合を除き、サーバーへの接続が切断または失敗した場合、「Recv failure: Connection was reset」というエラー メッセージが表示されます。

Web プレーヤー ビルドを使用する場合 (そうであると想定しています)、すべての「crossdomain.xml ポリシー ファイルが見つからないため拒否されました」をネットワーク ロスとして扱う必要があります。

これは、これら 2 つのシナリオがこのエラーを引き起こすという事実によるものです: クロスドメイン ファイルをダウンロードしようとしているときにサーバーへの接続をドロップする (現在、この事実をテストする時間がないため、これが webpayer の原因であると想定しています)、またはクライアントが接続しようとしているサーバーに crossdomain.xml ファイルがありません。Unity Web Player のセキュリティ対策により、クライアントからの接続は有効なクロスドメイン ポリシーを持つサーバーに接続する必要があります。

ポリシーの要件は、人々がエクスプロイトを作成して内部ネットワーク リソースなどにアクセスできないようにするための試みです。これは、テスト中は煩わしいかもしれませんが、本番環境ではクロスドメイン ポリシーの欠落が問題になることはありません。上記のファイルが正しく設定されている必要がある独自のサーバー、または正しいポリシーで正しく設定されている他のサーバーにのみ接続する必要があります。

于 2013-10-30T13:50:03.140 に答える