Transferências de Arquivos com Sockets

2 respostas
hertonk

Olá galera!! nao sei se eu to repetindo esse tópico, eu vi alguns sobre o assunto mais eram programas ja feitos, eu queria saber por onde eu começo, eu quero fazer um programa que transfira arquivos via socket em java, eu desenvolvi um que transfere “textos”, queria saber o que muda? e se preciso ou é obrigatório usar Threads? Abraço a a todos!

2 Respostas

peczenyj

Vc teria que desenvolver um protocolo para isso.

hertonk

Vlw ai peczenyj, mas eu acho que tu não entendeu minha pergunta ou eu perguntei mau, hehehe nao faz mal eu ja consegui sanar minha dúvida, era sobre o uso de quais classes eu iria usar para transferencia de arquivos via socket, ai eu to usando FileInputStream, FileOutputStream, BufferedInputStream e BufferedOutputStream, vo colokar o codigo aqui para se surgirem outras pessoas com a mesma dúvida :smiley:

Classe Servidor

import java.io.BufferedReader;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.File;
import java.io.BufferedInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
 
public class Servidor {
 
    public static void main(String[] args) {
         
         //Declaro o ServerSocket
         ServerSocket serv=null; 
         
         //Declaro o Socket de comunicação
         Socket s= 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
             BufferedInputStream entrada = new BufferedInputStream(s.getInputStream());
             
             File fi = new File("/var/www/web/aq/avatar.png"); 
             
             FileOutputStream fe = new FileOutputStream(fi);
             
             byte[] b = new byte[256];  
             int i=-1; 
            
             while ( (i=entrada.read(b)) != -1){  
            	//ta dando pau aqui
            	 fe.write(b);
            	 
             }
             
         //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){
             }
         }
     
         
         
         
         
     }
}

Classe Cliente

import java.io.IOException;
import java.io.FileInputStream;
import java.io.File;
import java.io.BufferedOutputStream;
import java.net.Socket;
import javax.swing.JOptionPane;
 
public class Cliente {
 
     public static void main(String[] args) {
         
         //Declaro o socket cliente
         Socket s = null;
         
         try{
             
             //Cria o socket com o recurso desejado na porta especificada
             s = new Socket("127.0.0.1",7000);
             
             String end = JOptionPane.showInputDialog("Digite o local do arquivo desejado:");
             
             File f = new File(end);
             
             FileInputStream fe = new FileInputStream(f);
             
             BufferedOutputStream in = new BufferedOutputStream(s.getOutputStream());

             byte[] b = new byte[(int)f.length()];  
             int i=-1;  
           
             while ( (i=fe.read(b)) !=-1){  
            	 in.write(b);           
             }    
             
             in.close();
             fe.close();
             
             
         //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){}
         
         }
 
     }
 }

Desculpa ai nao ta comentado, mais qq duvida responde aqui que eu ajudarei, Abraços a todos!

Criado 15 de outubro de 2007
Ultima resposta 16 de out. de 2007
Respostas 2
Participantes 2