Transferencia de arquivos (.txt, .pdf, .tiff) via sockets. Upload and Download
10 respostas
T
thpjf
Olá pessoal, estou a procura de alternativas para transferir arquivos via socket, obviamente em java, tando do cliente para o servidor e quanto do servidor p/ o cliente, ou seja upload e download.
Se alguem tiver algo consistente sobre o assunto, postem aqui.
importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.Socket;importjava.util.Scanner;publicclassClientCopy{publicstaticvoidmain(String[]args)throwsException{Scannertc=newScanner(System.in);System.out.println("File:");StringfName=tc.nextLine();Filef=newFile("CAMINHO DE ORIGEM DO FILE/"+fName);FileInputStreamin=newFileInputStream(f);Socketsocket=newSocket("IP DO SERIDOR",PORTA);OutputStreamout=socket.getOutputStream();OutputStreamWriterosw=newOutputStreamWriter(out);BufferedWriterwriter=newBufferedWriter(osw);writer.write(f.getName()+"\n");writer.flush();intc;while((c=in.read())!=-1){System.out.println(c);out.write(c);}}}
e o servidor
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;publicclassServerCopy{publicstaticvoidmain(String[]args){try{ServerSocketserver=newServerSocket(PORTA);SocketclSocket=server.accept();InputStreamin=clSocket.getInputStream();InputStreamReaderisr=newInputStreamReader(in);BufferedReaderreader=newBufferedReader(isr);StringfName=reader.readLine();System.out.println(fName);Filef1=newFile("CAMINO PARA DESTINO DO FILE/"+fName);FileOutputStreamout=newFileOutputStream(f1);intc;while((c=in.read())!=-1){out.write(c);}}catch(IOExceptione){}}}
Isso deve servir pra copiar
T
thpjf
Valew brother…vou testar, depois te falo…
[ ]'s Thpjf
T
thpjf
Amigo, a transferencia ta muito lenta…acho que devia estipular um valor pro buffer…talvez melhoraria o desempenho.
se conseguir me fala…
eu vou tentar dar uma mudada no meu codigo e se caso conseguir posto aqui.
Abraços
M
Megrin
Valeu cara este código me ajudou muito…foi só colocar o buffer e funcionou muito bem…
Vlw
Cliente
importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.Socket;importjava.util.Scanner;publicclassClient{publicstaticvoidmain(String[]args)throwsException{Scannertc=newScanner(System.in);System.out.println("File:");StringfName=tc.nextLine();Filef=newFile("/home/TTI1/marlon/Documentos/"+fName);FileInputStreamin=newFileInputStream(f);Socketsocket=newSocket("localhost",5678);OutputStreamout=socket.getOutputStream();OutputStreamWriterosw=newOutputStreamWriter(out);BufferedWriterwriter=newBufferedWriter(osw);writer.write(f.getName()+"\n");writer.flush();inttamanho=4096;// buffer de 4KB byte[]buffer=newbyte[tamanho];intlidos=-1;while((lidos=in.read(buffer,0,tamanho))!=-1){out.write(buffer,0,lidos);}}}
Servidor
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{publicstaticvoidmain(String[]args){try{ServerSocketserver=newServerSocket(5678);SocketclSocket=server.accept();InputStreamin=clSocket.getInputStream();InputStreamReaderisr=newInputStreamReader(in);BufferedReaderreader=newBufferedReader(isr);StringfName=reader.readLine();System.out.println(fName);Filef1=newFile("/home/TTI1/marlon/Documentos/novo/"+fName);FileOutputStreamout=newFileOutputStream(f1);inttamanho=4096;// buffer de 4KB byte[]buffer=newbyte[tamanho];intlidos=-1;while((lidos=in.read(buffer,0,tamanho))!=-1){System.out.println(lidos);out.write(buffer,0,lidos);}out.flush();}catch(IOExceptione){}}}
S
stalin
Estou tentando transfirir arquivos em uma aplicação que seja tolerante a falhas alguem tem ideia de como posso implementar?
E
entanglement
stalin:
Estou tentando transfirir arquivos em uma aplicação que seja tolerante a falhas alguem tem ideia de como posso implementar?
Use o esquema do Bit Torrent. Ele é extremamente tolerante a falhas.
S
stalin
Mas como eu iria implementar isso no java?
A
andredf
Megrin:
:) Valeu cara este código me ajudou muito...foi só colocar o buffer e funcionou muito bem...
Vlw
Cliente
importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.Socket;importjava.util.Scanner;publicclassClient{publicstaticvoidmain(String[]args)throwsException{Scannertc=newScanner(System.in);System.out.println("File:");StringfName=tc.nextLine();Filef=newFile("/home/TTI1/marlon/Documentos/"+fName);FileInputStreamin=newFileInputStream(f);Socketsocket=newSocket("localhost",5678);OutputStreamout=socket.getOutputStream();OutputStreamWriterosw=newOutputStreamWriter(out);BufferedWriterwriter=newBufferedWriter(osw);writer.write(f.getName()+"\n");writer.flush();inttamanho=4096;// buffer de 4KB byte[]buffer=newbyte[tamanho];intlidos=-1;while((lidos=in.read(buffer,0,tamanho))!=-1){out.write(buffer,0,lidos);}}}
Servidor
importjava.io.BufferedReader;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;publicclassServer{publicstaticvoidmain(String[]args){try{ServerSocketserver=newServerSocket(5678);SocketclSocket=server.accept();InputStreamin=clSocket.getInputStream();InputStreamReaderisr=newInputStreamReader(in);BufferedReaderreader=newBufferedReader(isr);StringfName=reader.readLine();System.out.println(fName);Filef1=newFile("/home/TTI1/marlon/Documentos/novo/"+fName);FileOutputStreamout=newFileOutputStream(f1);inttamanho=4096;// buffer de 4KB byte[]buffer=newbyte[tamanho];intlidos=-1;while((lidos=in.read(buffer,0,tamanho))!=-1){System.out.println(lidos);out.write(buffer,0,lidos);}out.flush();}catch(IOExceptione){}}}
Como acrescentar nesses códigos a possibilidade de mais de um cliente transferir um arquivo ao mesmo tempo?
T
thiago_divi
Pessoal, bom dia!
Sei que o tópico é mais antigo, mas como eu cheguei hoje e utilizei o código postado gostaria de deixar uma dica sobre um erro que encontrei.
No Client ao final do envio do arquivo é necessário fecha o socket, por que caso contrário será apresentado um erro no servidor, segue abaixo a alteração que fiz:
while((lidos=in.read(buffer,0,tamanho))!=-1){out.write(buffer,0,lidos);}/*inseri esta linha*/socket.close();
Caso contrário será apresentado o erro “java.net.SocketException: Connection reset” no servidor ao final da transferência do arquivo.
A
AdsonAlves
Galera tenho que fazer uma comunicação TCP/IP. Peguei o codigo desse topico e adaptei. O arquivo aparece criado no cliente/servidor. Porém sem conteúdo ! . Exemplo se encaminho um .txt o conteúdo anotado não aparece; Só o .txt vazio. O mesmo acontece quando encaminho um .jpg, o arquivo é criado , mas sem conteúdo ! Alguém poderia me ajudar ? Obrigado
Servidorimportjava.io.BufferedReader;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.ServerSocket;importjava.net.Socket;importjava.net.*;importjava.io.*;classServer{publicstaticvoidmain(String[]argv)throwsException{try{ServerSocketwelcomeSocket=newServerSocket(6789);SocketconnectionSocket=welcomeSocket.accept();BufferedReaderinFromClient=newBufferedReader(newInputStreamReader(connectionSocket.getInputStream()));DataOutputStreamoutToClient=newDataOutputStream(connectionSocket.getOutputStream());StringfName=inFromClient.readLine();System.out.println(fName);Filef1=newFile("/users/adsonAlves/desktop/trabalho redes/envio de arquivo/"+fName);FileOutputStreamout=newFileOutputStream(f1);inttamanho=4096;// buffer de 4KB 4096 byte[]buffer=newbyte[tamanho];out.flush();}catch(IOExceptione){}}
importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileInputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.Socket;importjava.util.Scanner;importjava.io.*;importjava.net.*;classClient{publicstaticvoidmain(Stringargv[])throwsException{Scannertc=newScanner(System.in);SocketclientSocket=newSocket("192.168.1.105",6789);DataOutputStreamoutToServer=newDataOutputStream(clientSocket.getOutputStream());BufferedReaderinFromServer=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));System.out.println("File:");StringfName=tc.nextLine();FileC=newFile("/users/adsonAlves/desktop/trabalho redes/envio de arquivo/"+fName);FileInputStreamin=newFileInputStream(C);OutputStreamWriterosw=newOutputStreamWriter(outToServer);BufferedWriterwriter=newBufferedWriter(osw);writer.write(C.getName()+"\n");writer.flush();inttamanho=4096;// buffer de 4KB byte[]buffer=newbyte[tamanho];clientSocket.close();}}