Minha intenção é através de socket transmitir arquivos de uma máquina para
outra, porém estou encontrando dificuldades no que diz respeito a capturar
da classe que envia o arquivo, o destino (pasta) na qual o arquivo deverá
ser transferido, ou seja, dentro do fluxo recebido não vejo uma solução
para separar a mensagem com a String contendo o nome da pasta e em seguida
o fluxo de bytes contendo o arquivo em si.
A utilização de socket é uma opção visando a segurança em função do método utilizado para transmissão através de um IP fixo e uma porta randômicamente gerada pela API.
Seguem meus códigos:
import java.io.;
import java.util.zip.;
import java.net.Socket;
// uso: java Tr <endereco ip destino>
public class Tr {
public static void main(String[] args) throws IOException {
Socket s = null;
s = new Socket(args[1], 7000);
FileInputStream in = new FileInputStream(args[0]);
BufferedOutputStream out = new
BufferedOutputStream(s.getOutputStream());
byte b[] = new byte[1024];
int nBytes;
System.out.println(b);
while ((nBytes = in.read(b, 0 , b.length)) != -1) {
out.write(b, 0, nBytes);
System.out.println("Tr=" + nBytes);
}
System.out.println("Arquivo transferido...");
in.close();
out.close();
s.close();
}
}
import java.io.;
import java.util.zip.;
import java.net.ServerSocket;
import java.net.Socket;
//uso: java Simp <driveDestino:pastaDestinoarquivo>
public class Simp {
public static void main(String[] args) throws IOException {
String nomearq = new String("");
String destino = new String("");
ServerSocket serv = null;
Socket s = null;
BufferedReader entrada = null;
serv = new ServerSocket(7000);
System.out.println("Aguardando transmissao... ");
s = serv.accept();
System.out.println("Connection accepted: "+ s);
BufferedInputStream in = new
BufferedInputStream(s.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(new
FileOutputStream(new File(args[0])));
byte bServer[] = new byte[1024];
int nBytesServer;
while ((nBytesServer = in.read(bServer, 0, bServer.length)) != -1) {
out.write(bServer, 0, nBytesServer);
System.out.println("simp=" + nBytesServer);
}
System.out.println("Arquivo recebido...");
s.close();
serv.close();
out.close();
}
}
Caso possua alguma sugestão a título de troca de informações, te agradeço.
Paulo Lincoln Ribeiro de Oliveira
Analista em Ciência e Tecnologia
IBGE/DI/COINF/GEASP
plincoln@ibge.gov.br
(21)2142-0584 (IBGE)