Воскресенье, 22 Декабря 2024, 19:34

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Проблемы со скачиванием файлов через WWW
DevMac1Дата: Вторник, 21 Января 2014, 12:00 | Сообщение # 1
был не раз
Сейчас нет на сайте
В общем, есть такой код для скачки файлов zip с сервера

Код

void SomeMethod()
{
               StartCoroutine (DownloadPackage());
}

IEnumerator DownloadPackage()
{
               WWW www = new WWW("http://someserver.com/package.zip");
               yield return www;
               byte[] packagebytes = www.bytes;
               File.WriteAllBytes("/SomeDirectory/package.zip",packagebytes);
}


В первый запуск код сработал нормально, паки скачались и записались на диск!
Но проблема в том, что после этого, когда я снова пытался запустить скрипт и скачать паки, каждый раз начала возникать ошибка

You are trying to load data from a www stream which had the following error when downloading.
transfer closed with N bytes remaining to read

К сожалению, я не имею доступа к настройкам сервера, так как им занимается другой человек, и не могу точно проверить его работу!
Но сами файлы через браузер с этого сервера качаются нормально и сервер работает!

Была мысль, что проблема в timeout в самом Unity! Но перечитав кучу доков, пришел к выводу, что таймаут класса WWW изменить нельзя и он зависит от платформы
(в данный момент провожу тестирование в Unity Editor, в дальнейшем игра будет работать на Android и IOS)

Буду очень благодарен, если вы подскажете, где еще может быть проблема и как ее решить! Возможно есть какие-то более удобные и лучшие способы скачки файлов из интернета, чем то, что я использую сейчас!


Сообщение отредактировал DevMac1 - Вторник, 21 Января 2014, 12:03
romgermanДата: Вторник, 21 Января 2014, 19:07 | Сообщение # 2
старожил
Сейчас нет на сайте
Может из-за того, что файлы уже загрузились и он не хочет перезаписывать файл?
DevMac1Дата: Вторник, 21 Января 2014, 19:26 | Сообщение # 3
был не раз
Сейчас нет на сайте
Нет, файлы удаляю перед каждым запуском! Но это не помогает!
afrokickДата: Вторник, 21 Января 2014, 19:30 | Сообщение # 4
участник
Сейчас нет на сайте
www.error что содержит после того, как скачался файл с и-нета?
DevMac1Дата: Среда, 22 Января 2014, 17:10 | Сообщение # 5
был не раз
Сейчас нет на сайте
www.error содержит transfer closed with 7813050 bytes remaining to read (в принципе то же самое)

Вот на следующий день утром запустил снова, скачалось нормально, без ошибок! Пару раз помог перезапуск самого Unity! И в первый запуск приложения в UnityEditor все скачивается нормально, потом начинают лезть эти ошибки при каждой очередной попытке! Такое ощущение, что либо в Unity либо в классе WWW хранится какой-то кеш или еще что-то, который не всегда обнуляется и мешает!

Добавлено (22.01.2014, 11:38)
---------------------------------------------
Ввел дополнительно еще вот такую конструкцию для дебага

Код

while( !www.isDone )
{
      float progress = www.progress;
      Debug.Log ("Progress " + progress);
      yield return null;
}


В результате получилось, что все файлы скачиваются примерно на 20%-30%, посл чего происходит ошибка!

Добавлено (22.01.2014, 17:10)
---------------------------------------------
В общем, проблему свою решил! Хотя вернее сказать, просто ее обошел!

Пришла в голову мысль использовать следующую конструкцию do while

Код

do   
{
   WWW www = new WWW("http://someserver.com/package.zip");     
   while( !www.isDone )
   {
    float progress = www.progress;
    Debug.Log ("Progress " + progress);
    yield return null;
   }
   byte[] packagebytes = www.bytes;
}   
while (!String.IsNullOrEmpty(www.error));


Таким образом, я постоянно стучусь на сервер за файлом до тех пор, пока он не скачается без ошибок! Получилось обойти ошибку! Она все равно возникает, но на второй/третий запрос файл скачивается! Скорее всего проблемы с серваком или интернет соединением!


Сообщение отредактировал DevMac1 - Среда, 22 Января 2014, 17:11
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг