Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
powowstal
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 369
#1

Удалить не полностью переданый файл через socket - Программирование Android

06.08.2016, 02:39. Просмотров 263. Ответов 3
Метки нет (Все метки)

Допустим вовремя загрузки файла упало соединение и файл закачался не полностью.
Как отследить что файл передался не полностью?

Код для приема файла:
Java
1
2
3
4
5
6
7
8
9
10
11
12
   long size = is.readLong(); //размер файла
            long bytesRemaining = size;
            byte[] buffer = new byte[clientSocket.getReceiveBufferSize()];
            int bytesRead = 0;
            while (bytesRemaining > 0 && (bytesRead = is.read(buffer, 0, (int) Math.min(buffer.length, bytesRemaining))) >= 0) {
                fos.write(buffer, 0, bytesRead);
                bytesRemaining -= bytesRead;
            }
            
            fos.close();
 
            System.out.println("Download "+ line);
накидал что то типа
Java
1
2
                if(clientSocket.isClosed()){
                    if(directory.length() != size){directory.delete();}
но явно ерунда выйдет.
Подскажите пожалуйста как отработать потерю связи правильно.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2016, 02:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удалить не полностью переданый файл через socket (Программирование Android):

Передать файл через socket или через ftp api
Посоветуйте как поступить: Есть файл на устройстве его нужно загрузить на...

Как полностью удалить студию (убунту)?
Как полностью удалить android studio 1.3.1 в ubuntu. Среда криво установилась....

Сеть через Socket
Есть программа (клиент), которая должна подключить к серверу, а он передаст ip...

Подключение через Socket
Недавно начал изучать разработку под андроид и вот поставили задачу написать...

Не подключается к серверу через Socket
Привет. Подключаюсь к серверу так: try { ShowMessage("try");...

Как полностью удалить файл?
Собственно, вопрос в заголовке темы. Если использовать file.delete(), то файл...

3
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
06.08.2016, 18:33 #2
powowstal, укажите какой протокол. если ваш собственный - передавайте в начале размер. если HTTP используйте content-length. если пришло данных меньше чем должно - удаляйте
0
powowstal
30 / 30 / 5
Регистрация: 21.03.2013
Сообщений: 369
09.08.2016, 21:14  [ТС] #3
vxg,
Цитата Сообщение от vxg Посмотреть сообщение
укажите какой протокол
-свой собственный.


выходит если произошла потеря связи цикл:
Цитата Сообщение от powowstal Посмотреть сообщение
Java
1
2
3
4
while (bytesRemaining > 0 && (bytesRead = is.read(buffer, 0, (int) Math.min(buffer.length, bytesRemaining))) >= 0) {
fos.write(buffer, 0, bytesRead);
bytesRemaining -= bytesRead;
}
завершается сам и мы проверяем к-во полученных байт:
Цитата Сообщение от powowstal Посмотреть сообщение
if(directory.length() < size){directory.delete();}
Я правильно все понял?
0
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
10.08.2016, 06:28 #4
Лучший ответ Сообщение было отмечено powowstal как решение

Решение

powowstal, да правда я не знаю что у вас за directory - вполне достаточно было бы проверить число которое лежит в bytesRemaining
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2016, 06:28
Привет! Вот еще темы с решениями:

В определенном месте формы сделать прямоугольник прозрачным, а через некоторое время полностью удалить его
Добрый вечер! Хочу на форме, в определенном месте сделать прямоугольник сначала...

Удалить файл через промежуток времени
Ребзя, привет, собственно такой вопрос, я нуль в php программировании и java...

Невозможно создать Socket: Socket sock = new Socket(someHostString,somePortInt);
Народ! Помогите пожалуйста. Вся красота губится на exception что выскакивает в...

удалить файл переданный параметром через контекстное меню
static void Main(string args) { FileInfo...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru