Estou tentando transmitir um arquivo entre dois hosts via Sockets, sendo que compacto a stream com GZIPOutputStream/GZIPInputStream para diminuir o trafego (estou trasmitindo via Internet). Se transmito arquivos de texto plano funciona 100%, se transmito arquivos binarios ele troca varios caracteres p ex. Ï por 9, Ä por }, ê por ã, corrompendo totalmente o arquivo. Se alguem puder ajudar ficaria muito grato.
Segue o codigo dos dois programas:
import java.io.*;
import java.util.zip.*;
import java.net.ServerSocket;
import java.net.Socket;
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();
BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(s.getInputStream())));
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream( "d:\temp\teste.txt" ));
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
s.close();
serv.close();
out.close();
}
}
import java.io.*;
import java.util.zip.*;
import java.net.Socket;
// uso: java Tr <arquivo> <endereco ip destino>
public class Tr {
public static void main(String[] args) throws IOException {
Socket s = null;
s = new Socket(args[1], 7000);
BufferedReader in = new BufferedReader(new FileReader(args[0]));
BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(s.getOutputStream()));
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
in.close();
out.close();
s.close();
}
}