Transferencia de Arquivos com Socket (?)

8 respostas
christianovale

Bom dia,
Estou tentando fazer a transferencia de um diretório pela rede e estou usando Sockets em estrutura Cliente/Servidor. Porém só consigo enviar mensagens de texto entre eles (ainda).
Como eu posso fazer para tranferir o conteúdo de um diretório?

Obrigado!


by
Christiano Vale

8 Respostas

T

Você está tentando replicar a funcionalidade do FTP, é isso?

Puxa vida…

Em vez disso, ponha um serviço ssh no servidor e use o scp no cliente, é muito mais seguro e eficiente.

Bom, você sabe que existe o suporte a arquivos zip no Java. Você pode construir um arquivo zip sem compressão e mandá-lo. A estrutura de diretórios está no arquivo, então fica fácil abrir o diretório.

J

Use o ByteArrayOutputStream

christianovale

Como eu faço para implementar esses serviços de ssh e scp?
Vc tem um exemplo que possa me passar?
Tenho um pouco de urgencia pra resolver isso.

Obrigado.

T

Então…
ssh e scp não são Java, mas C.
Isso já está pronto e compilado para vários sistemas operacionais, mas você precisa instalar o servidor de ssh (sshd) no servidor, se é que já não está instalado, e o client deve ter o scp.
Se o servidor for uma versão atualizada do Linux ou do Solaris, provavelmente o sshd já está até funcionando, portanto é só questão de ver o client. Existe um pscp.exe disponível por aí (PuTTY SCP) se quiser usar o Windows como client. Você poderia usar algo como

pscp -r -l jose -pw aparecido -C *.java jose@suamaquina:/home/jose/arquivos

para copiar recursivamente os arquivos *.java para a máquina “suamaquina” usando o usuário jose, senha aparecido.

christianovale

Entendi. Mas parece que desta forma vai complicar muito uma coisa simples que quero fazer.
Deixa eu explicar:
Onde trabalho o sistema que desenvolvi funciona Distribuído; Quase toda semana sai alguma modificação ou inclusão de novos serviços no mesmo;
O que quero é que toda vez que um usuário for acessar o sistema, (antes de ser carregado) um outro programa faz a atualização deste a partir da minha maquina (isso pra não precisar atualiza-lo maquina por maquina da rede, que são muitas).

o que ja fiz até agora:

consegui usando ObjectOutputStream e ObjectInputStream fazer com que ele faça a transferência, porém, só transfere um arquivo somente.

Gostaria então de conseguir uma maneira de transferir todo o conteúdo da pasta de atualização ou, então, gerar um arquivo ZIP e transferi-lo, mas, não sei como compactar e descompactar arquivos em Java. Se vc tiver pode me enviar essas rotinas (compactar e descompactar)?

Obrigado!

T

Hum, não tenho assim de bate-pronto, mas
pegue os exemplos aqui:

http://www.javaalmanac.com/egs/java.util.zip/pkg.html

louds

Já que você não sabe, que tal aprender?
Dica… olhe o pacote java.util.zip

christianovale

Blz
Estou tentando implementar um método para descompactar um pacote ZIP, mas, o codigo que estou usando busca apenas uma entrada, ou seja, ele so descompacta um arquivo.
Como posso fazer para descompactar todo o pacote?
Segue o codigo que estou usando:

try { 
        
        String inFilename = "arquivo.zip"; 
        ZipInputStream in = new ZipInputStream(new FileInputStream(inFilename)); 
    
        // Pega a primeira entrada 
        ZipEntry entry = in.getNextEntry(); 
    
        
        String outFilename = "teste.txt";//Observação 
        OutputStream out = new FileOutputStream(outFilename); 
    
        
        byte[] buf = new byte[1024]; 
        int len; 
        while ((len = in.read(buf)) > 0) { 
            out.write(buf, 0, len); 
        } 
    
        
        out.close(); 
        in.close(); 
    } catch (IOException e) { 
    }

Observação: este nome do arquivo muda de acordo com uma lista dos nomes dos arquivos compactados armazenados em um Vector, ou seja, atravez do codigo abaixo eu listo em um Vector os nomes dos componetes do arquivo ZIP e vopu passando eles como parametro para o codigo acima.

Se alguem puder me dizer onde estou errando, ficarei muito grato.

{ 
      String zipEntryName = ""; 
      nomes = new Vector(); 
       
    try { 
        
        ZipFile zf = new ZipFile("Arquivo.zip"); 
    
        
        for (Enumeration entries = zf.entries(); entries.hasMoreElements();) 
        { 
            
            zipEntryName = ((ZipEntry)entries.nextElement()).getName(); 
            nomes.addElement(zipEntryName); 
        } 
    } catch (IOException e) { 
    } 

   }
Criado 12 de maio de 2005
Ultima resposta 12 de mai. de 2005
Respostas 8
Participantes 4