Dúvida - Enviar objetos via SOCKET

6 respostas
S

Olá pessoal. Estou precisando de uma ajuda aqui.

Estou fazendo um trabalho aqui e estou precisando enviar um objeto do cliente para o servidor.
O objeto deve ser o mesmo, obviamente. Então, tanto servidor como cliente tem a mesma implementação.
O objeto é o seguinte:

class Voto implements Serializable {

private static final long serialVersionUID = 7503368771944847788L;

public int codigoCandidato;

public int codigoEleitor;
public Voto(final int celeitor, final int ccandidato) {

this.codigoCandidato = ccandidato;

this.codigoEleitor = celeitor;

}

}

No cliente eu envio com o código:

Socket client = new Socket(SERVER, SERVERPORT); // ta ok, se for string ele envia de boa

output = new ObjectOutputStream(client.getOutputStream());

output.flush();
output.writeObject(voto); // com um objeto voto ja inicializado

output.flush();

output.close();

o servidor recebe assim:

private ServerSocket server;

private Socket connection;

private Voto message;
server = new ServerSocket(SERVERPORT);

connection = server.accept();

ObjectInputStream input = new ObjectInputStream(connection.getInputStream());

message = (Voto) input.readObject();

Bom… acho q isso resume a parte q ta dando pau!
Qdo o objeto é um String em vez de Voto, essa implementação funciona que é uma beleza. Contudo, quando peço para enviar o objeto que preciso tenho o erro:

java.lang.ClassCastException: client.Voto cannot be cast to server.Voto

Mas a implementacao da classe Voto é exatamente a MESMA (inclusive com o msm serialVersionUID) em ambas as classes (cliente e servidor).

O que estou fazendo de errado???

Me ajudem, por favor!

6 Respostas

T

As duas classes pertencem a pacotes diferentes (client e server, respectivamente), portanto são classes diferentes. A menos que client.Voto seja uma classe que “extends” server.Voto, vai haver ClassCastException mesmo.

D

Mesmo as classes sendo iguais em código fonte, elas são duas classes distintas (pacotes diferentes) e vc não consegue fazer o cast (ClassCastException)… pq vc não cria a classe fora dos pacotes server e client. Cria um pacote, tipo utils, e coloca a classe Voto dentro dele… ai vc envia e recebe essa classe, ok?

S

Nossa! era só isso mesmo!

:smiley:

Muito obrigado!

L

Nossa eu estava com esse problema também…
e resolvi ele usando string, eu enviava uma string e depois fazia o tratamento dela pra transformar ela em objeto , já estou apagando todo o tratamento de string , assim é muito mais fácil e seguro para enviar um objeto
:smiley:

D

Só gostaria de chamar a atenção para essa questão: o envio/recebimento de objetos Java (not String) por socket é válido quando tanto o cliente quanto o servidor são Java. Quando temos a comunicação entre linguagens, como por exemplo C / Java, é interessante estabelecer um protocolo e enviar Strings mesmo.

F

Sei que o topico é antigo, mas resgatando … hihi, alguém tem um exemplo de como criar esse pacote mencionado ? Valeu, grato por antecipação.

Criado 12 de novembro de 2008
Ultima resposta 20 de abr. de 2013
Respostas 6
Participantes 5