Download de arquivo via socket

2 respostas
M

Boa tarde pessoal,

Pessoal to tentando fazer com q eu possa fazer download de uma arquivo de uma maquina para uma outra maquina"por enquanto só to usando o localhost", usei BufferedOutputStream bom não consegui voltei ao codigo original ???

Codigo abaixo???

-------------Cliente ------------

package socket;

import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
 
public class Cliente {
 
     public static void main(String[] args) {
         
         //Declaro o socket cliente
         Socket s = null;
         
         //Declaro a Stream de saida de dados
         PrintStream ps = null;
         
         try{
             
             //Cria o socket com o recurso desejado na porta especificada
             s = new Socket("127.0.0.1",7000);
             
             //Cria a Stream de saida de dados
             ps = new PrintStream(s.getOutputStream());
             
             //Imprime uma linha para a stream de saída de dados
             ps.println("Estou enviando dados para o servidor");
             
         //Trata possíveis exceções
         }catch(IOException e){
             
             System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket.");
         
         }finally{
             
             try{
                 
                 //Encerra o socket cliente
                 s.close();
                 
             }catch(IOException e){}
         
         }
 
     }
 }

----------------Servidor-------------------

package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor {
 
     public static void main(String[] args) {
         
         //Declaro o ServerSocket
         ServerSocket serv=null; 
         
         //Declaro o Socket de comunicação
         Socket s= null;
         
         //Declaro o leitor para a entrada de dados
         BufferedReader entrada=null;
                 
         try{
             
             //Cria o ServerSocket na porta 7000 se estiver disponível
             serv = new ServerSocket(7000);
         
             //Aguarda uma conexão na porta especificada e cria retorna o socket que irá comunicar com o cliente
             s = serv.accept();
             
             //Cria um BufferedReader para o canal da stream de entrada de dados do socket s
             entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
             
             //Aguarda por algum dado e imprime a linha recebida quando recebe
             System.out.println(entrada.readLine());    
             
         //trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io    
         }catch(IOException e){
         
             //Imprime uma notificação na saída padrão caso haja algo errado.
             System.out.println("Algum problema ocorreu para criar ou receber o socket.");
         
         }finally{
             
             try{
                                  //Encerro o socket de comunicação
                 s.close();
                 
                 //Encerro o ServerSocket
                 serv.close();
                 
             }catch(IOException e){
             }
         }
     
         
         
         
         
     }

2 Respostas

I

Deves pegar o OutputStream de onde queres despachar o arquivo e criar um FileOutputStream, pegar os bytes do arquivo e escrever. Do outro lado deves fazer o inverso, criar um InputStream, ler os bytes e remontar o arquivo.

T+

P

OLá senhor,
Tenho códigos com o mesmo objetivo que você quer vê se te ajuda em algo.

package conexao;

import java.io.BufferedInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.PrintWriter;

import java.net.Socket;
public class Remetente extends Thread {

private Socket s = null;

private BufferedInputStream in = null;

private DataOutputStream out = null;

private File file = null;

private int buffer;

private long tamanhoArquivo = 0;

private long totalEnviado = 0;

private PrintWriter outUsu = null;
/**
 * Construtor da classe.
 *
 * @param endereço de destino.
 * @param porta de comunicação.
 * @param arquivo a ser transferido.
 *
 * @throws IOException
 */

public Remetente(String endereco, int porta, File arquivo, PrintWriter usu) throws IOException {
	this.outUsu = usu;
	outUsu.println(endereco);
	s = new Socket(endereco, porta);
	tamanhoArquivo = arquivo.length();
	file = arquivo;
}

public void run() {
	try {
		in = new BufferedInputStream(new BufferedInputStream(
				new FileInputStream(file)));
		out = new DataOutputStream(s.getOutputStream());

		while((buffer = in.read()) != -1) {
			out.write(buffer);
			out.flush();
			totalEnviado++;
		}
		detalhes();
	} catch (IOException e) {
		e.printStackTrace(outUsu);
	} finally {
		try {
			s.close();
			in.close();
			out.flush();
			out.close();
		} catch (IOException e){
			//e.printStackTrace(outUsu);
		}
	}
}

public void detalhes() {
	outUsu.println("Arquivo transferido.");
	outUsu.println("Tamanho do arquivo transferido = "+tamanhoArquivo);
	outUsu.println("Total de bytes enviados = "+totalEnviado);
}

}

package conexao;

import java.io.BufferedInputStream;

import java.io.DataOutputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;
public class Destino extends Thread {

private ServerSocket s = null;

private BufferedInputStream in = null;

private DataOutputStream out = null;

private String destino = “”;

private long totalRecebido = 0;

private int buffer = -1;
/**
 * Construtor da classe.
 *
 * @param caminhoDestino onde deve ser salvo o arquivo.
 * @param porta porta de comunicação.
 *
 * @throws IOException
 */

public Destino(String caminhoDestino, int porta) throws IOException {
	destino = caminhoDestino;
	s = new ServerSocket(8180);
}

public void run() {
	try {
		Socket socket = s.accept();
		out = new DataOutputStream(new FileOutputStream(destino));
		in = new BufferedInputStream(socket.getInputStream());
		while((buffer = in.read()) != -1){
			out.write(buffer);
			out.flush();
			totalRecebido++;
		}
	} catch (IOException e) {
		e.printStackTrace();
	} finally {
		try {
			s.close();
			out.flush();
			out.close();
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

public long totalRecebebido() {
	return totalRecebido;
}

}

Bom sorte.
Ass: Pelom Cabelom

Criado 4 de dezembro de 2006
Ultima resposta 5 de dez. de 2006
Respostas 2
Participantes 3