Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
#1

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

06.08.2016, 02:39. Просмотров 217. Ответов 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
Посоветуйте как поступить: Есть файл на устройстве его нужно загрузить на сервер. 1 Загружать через socket, создав на сервере...

Как полностью удалить студию (убунту)? - Программирование Android
Как полностью удалить android studio 1.3.1 в ubuntu. Среда криво установилась. Можно ее как нибудь полностью удалить чтобы установить с...

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

Подключение через Socket - Программирование Android
Недавно начал изучать разработку под андроид и вот поставили задачу написать некий клиент, который должен коннектиЦа через сокет на...

Не подключается к серверу через Socket - Программирование Android
Привет. Подключаюсь к серверу так: try { ShowMessage("try"); //InetAddress ipAddress = InetAddress.getByName(HOST); //...

Как полностью удалить файл? - C#
Собственно, вопрос в заголовке темы. Если использовать file.delete(), то файл всё равно остаётся в корзине. В winapi лезть не хочу. Есть ли...

3
vxg
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
06.08.2016, 18:33 #2
powowstal, укажите какой протокол. если ваш собственный - передавайте в начале размер. если HTTP используйте content-length. если пришло данных меньше чем должно - удаляйте
0
powowstal
30 / 30 / 6
Регистрация: 21.03.2013
Сообщений: 367
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
Модератор
3181 / 1984 / 226
Регистрация: 13.01.2012
Сообщений: 7,669
10.08.2016, 06:28 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
powowstal, да правда я не знаю что у вас за directory - вполне достаточно было бы проверить число которое лежит в bytesRemaining
1
10.08.2016, 06:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2016, 06:28
Привет! Вот еще темы с ответами:

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

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

удалить файл переданный параметром через контекстное меню - C#
static void Main(string args) { FileInfo file=new FileInfo(args); file.Delete(); ...

Дан файл с элементами верхнетреугольной матрицы, создать файл содержащий матрицу полностью - Turbo Pascal
Дан файл вещественных чисел содержащий ненулевую часть верхнетреугольной матрицы по строкам.Создать новый файл содержащий все элементы...


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

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

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