Tenho uma aplicação de um jogo do tipo banco imobiliario e estou tendo alguns problemas quanto tento enviar um objeto via socket, ocorre uma exceção do tipo: streamcorruptedexception invalid stream header, não sei dizer se é mesmo o objeto por ser muito grande que causa esse tipo de erro, creio que não, mas como vi em muito lugares que não é recomendado enviar o objeto em sí pela conexão, e que era melhor enviar um arquivo TXT ou um XML, pesquisei um pouco sobre a biblioteca XStream que gera um String que contem o XML do objeto que quero enviar, achei fantastico pois facilitaria muito já que teria que enviar somente um String e não um arquivo, baixei a biblioteca do site mas não consegui fazer com que o NetBeans reconhece, depois vi que tenho que coloca-la no CLASSPATH mas mesmo com a ajuda do Tutorial aqui do GUJ pra setar o CLASSPATH no win XP não consegui, se alguem conhecer um outro tutorial que talvez possa me ajudar e postar aqui ajudaria muito. Depois tentei serializar o objeto para um arquivo e enviar este via socket, criei este pequeno exemplo de teste:
CLIENTE:
public class Main {
public static void main(String[] args) {
try {
Socket conexao = new Socket("127.0.0.1", 1234);
Aluno aluno = new Aluno("nelson", 2.28);
FileOutputStream geraArquivo = new FileOutputStream("teste.txt");
ObjectOutputStream escreve = new ObjectOutputStream(geraArquivo);
escreve.writeObject(aluno);
FileInputStream leArquivo = new FileInputStream("teste.txt");
BufferedInputStream pegaArquivo = new BufferedInputStream(leArquivo);
byte[] buf = new byte[512];
BufferedOutputStream mandaArquivo = new BufferedOutputStream(conexao.getOutputStream());
pegaArquivo.read(buf);
mandaArquivo.write(buf);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
SERVIDOR:
public class Main {
public static void main(String[] args) {
try {
ServerSocket servidor = new ServerSocket(1234);
Socket conexao = servidor.accept();
BufferedInputStream entraArquivo = new BufferedInputStream(conexao.getInputStream());
System.out.println("Fluxo de entrada de byte criado");
byte[] buf = new byte[512];
FileOutputStream escreve = new FileOutputStream("TESTE.txt");
BufferedOutputStream escreveArquivo = new BufferedOutputStream(escreve);
entraArquivo.read(buf);
escreveArquivo.write(buf);
FileInputStream leArquivo = new FileInputStream("TESTE.txt");
ObjectInputStream criaObjeto = new ObjectInputStream(leArquivo);
Aluno aluno = (Aluno) criaObjeto.readObject();
System.out.println(aluno.nome + " - " + aluno.CR);
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
}
O cliente executa numa boa, mas o servidor exibe uma exceção: java.net.SocketException: Connection reset
Gostaria primeiramente de saber qual dos três caminhos tomar, mandar o objeto mesmo porque o erro pode não ter nada a ver com o envio do mesmo, utilizar o XStream para enviar as Strings contendo os XMLs ou enviar o arquivo do objeto serializado? quem tiver alguma experiência no assunto e puder ajudar fico grato, ou quem puder me ajudar com o problema com a biblioteca XStream também seria de grande ajuda.
Valeu!