Estou tentando fazer um sisteminha desktop de ftp mas bem simples a unica funcionalidade sera enviar o arquivo no qual até ja fiz porem preciso que se a conexao cair (internet) ele possa continuar o envio de onde parou, ja estou fazendo o envio via buffer pra saber o quanto ja foi por tratar de arquivos grandes mas não acho como continuar esse envio quebrado...
Alguem ja passou por esse problema ou tem alguma dica?
Grato
tracho do envio:
int counter = 0;
while (true) {
int bytes = in.read(buffer);
if (bytes < 0)
break;
out.write(buffer, 0, bytes);
counter += bytes;
System.out.println("File " + arq + ": " + counter + " bytes");
}
Enquanto eu brincava desenvolvendo meu pseudo servidor telnet com funções built-in malucas em Java, uma das coisas que implementei foi o protocolo SAWFTP, que suportava compressão, continuação de downloads e outras esquisitices que não lembro mais.
Basicamente, na parte de continuação de downloads, fiz o seguinte:
Verifiquei o tamanho de arquivo incompleto no lado que irá receber o arquivo e enviei essa informação ao lado que irá enviar.
Fiz checagem checksum no arquivo incompleto no lado que irá receber o arquivo e também fiz checagem no lado que irá enviar o arquivo, mas fiz essa checagem no lado que irá enviar apenas até o limite de tamanho do arquivo incompleto. Depois envio ambos valores checksum para que os dois lados possuam os valores de checksum obtidos.
Se os valores checksum estiverem corretos de ambos os lados, a continuação de download é permitida, e aí uso o construtor ‘FileOutputStream(String name, boolean append)’ no lado que receberá o arquivo e no lado que irá enviar o arquivo invoco o método skip(long n) no FileInputStream do arquivo completo, passando como parâmetro o tamanho do arquivo incompleto.
Foi assim que fiz, acho que é um exemplo razoável.
Valew Thingol!
Agora consegui resolver, quem estiver usando api (org.apache.commons.net.ftp.FTPClient) e precisar então fazer o reenvio de um arquivo que foi enviado pela metade use: