Como transmitir uma pasta toda para outro computador via socket
4 respostas
R
Rockfido
Pessoal criei um servidor e um cliente usando socket agora gostaria de saber como faço para enviar todos os arquivos de uma determinada pasta.
exemplo o socket cliente fica varrendo a mesma pasta sempre de 10 em 10 segundos entao quando um arquivo aparecer la ele o envia para o servidor que esta esperando direto.
alguem pode me dar uma ajuda ainda sou meio fraco com sockets
Oi, para fazer esta implementação, minhas idéias iniciais foram as seguintes:
Assim que a thread identificar um ou mais arquivos, obter os nomes do mesmo e guardar em cache. Desta forma, se entrar outros arquivos durante o processamento, não haverá problemas, pois você ja definiu o conjunto de arquivos que vai trabalhar.
Acessar cada arquivo carregando-o em um FileInputStream
Passar o conteudo do arquivo do FileInputStream para um array de bytes… :
FileInputStreamfs=newFileInputStream(’'arquivo…");byte[] conteudo = new byte[fs.available()];fs.read(conteudo);
adiciona o array de bytes em uma classe wrapper própria:
public class ArquivoTransmitir implements java.io.Serializable { private String nomeArq; private byte[] arq; get()… set()… }
Transmite o arquivo, utilizando o metodo writeObject …:
new ObjectOutputStream(socket.getOutputStream()).writeObject(arquivoTransmitir);
Do outro lado, voce utiliza ObjectInputStream para ler o objeto e volta-lo ao formato ArquivoTransmitir
Cria um FileOutputStream e grava os bytes, utilizando o nome do arquivo
Caso os arquivos sejam grandes, uma ideia é voce utilizar compressão GZIP antes de transmitir os bytes… Em uma ponta, vc usa a compressão e na outra desfaz.
Transmitirá arquivo por arquivo, para evitar sobrecarga de rede.
Mas caso sejam arquivos pequenos e queira transmitir vários ao mesmo tempo, transmite um objeto ArrayList