Como transmitir uma pasta toda para outro computador via socket

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

Dá uma olhada nisso:
http://javafree.uol.com.br/artigo/2879/Programando-com-sockets-em-java-parte-01.html

É só fazer em uma Thread que roda a cada 10 segundos, acho que isso deve resolver o seu problema.

outros materiais para leitura:


http://fipp.unoeste.br/~chico/comunicacao_socket/index.htm

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… :

FileInputStream fs = new FileInputStream(’'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

Espero ter ajudado.

Romilson Carvalho

Não esqueça do close() dos inputStreams