Como transmitir uma pasta toda para outro computador via socket

4 respostas
R

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

4 Respostas

M

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.

M

outros materiais para leitura:


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

CarvalR2

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

CarvalR2

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

Criado 16 de março de 2010
Ultima resposta 16 de mar. de 2010
Respostas 4
Participantes 3