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) 