Transferência de arquivos binários em Java

Publicado por João Gabriel Canhoto em 03/10/2005

[ Hits: 18.414 ]

 


Transferência de arquivos binários em Java



Eu sempre gostei muito de programar para redes, mas estava habituado a programar em C e quando eu descobri o Java, descobri um mundo inteiro de oportunidades e facilidades e principalmente... um mundo sem "segment fault". eheheh

Esta minha dica é para mostrar que é muito fácil criar um servidor para transferência de arquivos binários através da rede.

Aqui vai o meu exemplo (tentei comentar o máximo possível):

import java.net.*;
import java.io.*;

/* Esta class cria uma Thread */
public class ServerMe extends Thread {

    /* declara variável e inicia com valor null */
    ServerSocket lista = null;
    /* declara o socket cliente e inicia com valor null */    
    Socket cliente = null;

    private final int port = 999;
    private final String filename = "teste.zip";

    private void IniciaServer(){

        /* tenta iniciar o listen do server, se não sai */
        try {
            lista = new ServerSocket(port);        
        }catch(Exception e){
            System.out.println(e);
            System.exit(0);
        }

        /* while infinito , para que o server aceite várias conexões
         * em diferentes tempos .
         */

        while (true) {

            try {

                /* pronto o servidor aceitou o cliente  */
                cliente = lista.accept();

                /* agora e so preparar o outputstream para enviar o arquivo */

                DataOutputStream out = new DataOutputStream (cliente.getOutputStream());

                /* abrir arquivo para o envio  */
                FileInputStream fin = new FileInputStream (filename);
                DataInputStream in = new DataInputStream (fin);

                /* cria um buffer de 512 bytes para o envio */
                byte buffer[] = new byte[512];            

                /* envia os dados :) */
                while (in.read(buffer) != -1)
                    out.write(buffer,0,buffer.length);

            }catch (Exception e){
                System.out.println(e);
                System.exit(0);
            } finally {

                /* tenta fechar o cliente  */
                try {
                    cliente.close();
                }catch (Exception e) {
                    System.exit(0);
                }

            }

        }

    }

    /* Método herdado de Thread
    * este metodo e chamado quando se iniciar a thread
  */
    public void run(){
        IniciaServer();
    }
}

Pronto, este é um servidor que envia arquivos. Agora convido o leitor para programar um cliente para receber este arquivo! Fiquem bem e até a próxima.

Outras dicas deste autor

Introdução ao Java Micro Edition (J2ME)

Leitura recomendada

Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]

Usando sockets em Java - Comunicação com um servidor

Sinal EOF ou EOT com sockets

Sistemas Distribuídos - Aplicação simples Java RMI

Placa de rede que não sobe corretamente

  

Comentários
[1] Comentário enviado por brenner.toledo em 27/07/2006 - 15:57h

Muito bom o artigo. Parabéns, muito bem comentado. Gostei, principalmente porque eu trabalho com sockets em Delphi 2005 e estava com o desafio de "traduzir" um código de Pascal para Java e explica certinho como proceder Cliente/Servidor. Valeu, ajudou muito.

[2] Comentário enviado por ricardo_dias em 17/07/2013 - 18:03h

Você saberia me dizer como monitorar o trafego de arquivos pela rede, preciso de alguma solução para mim realizar um calculo para avançar a barra de progressão.. e não estou sabendo como..

no aguardo

ricardo.diasdesouza@gmail.com



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts