Проблемы с большими объемами передачи данных через асинхронное сокетное соединение в Android - PullRequest
1 голос
/ 17 мая 2011

У меня есть приложение для Android, которое связывается с сервером через асинхронное сокетное соединение для передачи довольно больших пакетов информации (до 11 мегабайт). Чтобы приспособиться к этому взаимодействию, я поместил небольшие сны в ключевые точки отправки и получения данных. На WiFi связь работает. Делать с размером информации, которую нужно прочитать или записать, недостаточно, но я создал функции, позволяющие продолжать чтение из сокета до завершения передачи.

Как я уже сказал, все это работает по WiFi. Однако в сетях 3G или пограничных сетях передача завершается неудачно, прерывается на полпути и, как правило, связана с ошибками. Я разместил множество проверок и снов, чтобы обеспечить возможность передачи информации, однако это не удается.

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

TLDNR WiFi может отправлять данные, но мобильные сети не работают. Мне нужно знать, почему и как это исправить.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Фактическая проблема оказалась в том, что сумма, полученная за read(), была значительно меньше, чем я ожидал.Моя программа требовала, чтобы вся схема была отправлена ​​через XML, прежде чем программа знала, как ее использовать.Он не получил достаточного количества струны, и поэтому умрет.Теперь он проверяет наличие тега / schema в строке (через if (!response.contains("/schema"))) и не прекращает чтение, пока не обнаружит это или не истечет время ожидания.

0 голосов
/ 17 мая 2011

Возможно, вам нужно решение, которое позволит возобновить прерванную передачу данных. Посмотрите , как возобновить прерванную загрузку - примеры 2 и https://stackoverflow.com/search?q=[android]+resume+download.

Кроме того, я настоятельно рекомендую посмотреть презентацию Вирджила Добжански Google I / O 2010 о клиентских приложениях Android REST , в которой он описывает разработку приложения для обработки таких данных и сетевых коммуникаций. Он является автором официального приложения Twitter для Android.

...