1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Enviar Objetos via Sockets em Java

Olá, tenho o seguinte código para o Cliente:

Scanner dados = new Scanner(System.in); 

ObjectOutputStream saida = null;
        try {
            saida = new ObjectOutputStream(servidor.getOutputStream());
        } catch (IOException ex) {
            Logger.getLogger(Saida.class.getName()).log(Level.SEVERE, null, ex);
        }

     // Loop principal
        while (true) {
            try{
                int valor1 = dados.nextInt();
                String operador = dados.next();
                int valor2 = dados.nextInt();
                Operacao op = new Operacao(valor1, operador, valor2);
                saida.writeObject(op);
                saida.close();
            }catch (IOException e){
                System.out.println("..");
            }
        }

E o seguinte para o Servidor:

        ObjectInputStream entrada = null;
        try {
            entrada = new ObjectInputStream(cliente.getInputStream());
        } catch (IOException ex) {
            Logger.getLogger(Entrada.class.getName()).log(Level.SEVERE, null, ex);
        }

while (true) {
            try {

                Operacao operacao = (Operacao) entrada.readObject();

            } catch (IOException ex) {
                Logger.getLogger(Entrada.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(Entrada.class.getName()).log(Level.SEVERE, null, ex);
            }  
        }
    }

Tenho a classe Operacao:

package cliente;

import java.io.Serializable;

public class Operacao implements Serializable {
    private int valor1, valor2;
    private String op;

    private static final long serialVersionUID = 5950169519310163575L;

    Operacao(int valor1, String op, int valor2) {
        this.valor1 = valor1;
        this.op = op;
        this.valor2 = valor2;
    }

No entanto, ocorre erro e creio que seja no lado do servidor ao receber o objeto.

Não entendi muito bem a parte de serialização.

:(

Está ocorrendo o seguinte erro:

GRAVE: null java.lang.ClassNotFoundException: cliente.Operacao at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:247) at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:603) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1574) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) at servidor.Entrada.run(Entrada.java:33) at java.lang.Thread.run(Thread.java:662)

  • Qual erro ocorre?

    ViniGodoy   05 de mai de 2015
  • Adicionei ao enunciado o erro.

    Por favor, desconsidere o saida.close(); na primeira classe.

    hdonancio   05 de mai de 2015
  • A class Operacao está nos dois projetos? E em ambas no pacote cliente?

    ViniGodoy   05 de mai de 2015
  • Tenho duas classes Operacao, uma em cada projeto. Uma no pacote servidor e outra no pacote cliente. Sobre a troca de mensagens tenho funcionando um exemplo, no entanto quando tentei enviar um Object não consegui. Testei a saida do cliente imprimindo os elementos que o compõe através de get().

    O erro ocorre no servidor.

    hdonancio   05 de mai de 2015
  • As classes, dos dois lados, tem que estar exatamente no mesmo pacote. Note que o erro que ele dá é que não encontrou a classe "cliente.Operacao"

    ViniGodoy   05 de mai de 2015
Mostrar todos os 8 comentários>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java sockets orientação-a-objetos ou faça a sua própria pergunta.