Jump to content

Problemas com ObjectInputStream e ObjectOutputStream e ClassNotFoundException


Sergiosaturn
 Share

Recommended Posts

Saudações programadores. 👍

Para um projecto que eu estou a desenvolver eu escrevi este pedaço de codigo, que usa as classe Socket, ObjectInputStream  e ObjectOutputStream.

Codigo do Cliente

package socketcliente;

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class Main {

   public static void main(String[] args) throws Exception {

       Dados d = new Dados("Sergio",21,"gmr");

       Socket s = new Socket("localhost",9999);   //isto tem de estar criado senao rebenta

       ObjectOutputStream o = new ObjectOutputStream(s.getOutputStream());
       o.flush();
       ObjectInputStream i = new ObjectInputStream(s.getInputStream());

       System.out.println("Canais de comunicacao criados\n\n");

       o.writeObject(d);
       o.flush();

       System.out.println("Enviar objecto\n\n");


}

}

Codigo do Servidor

package socketservidor;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Main {

    public static void main(String[] args) throws IOException, ClassNotFoundException {

       System.out.println("\n\nBem vindo ao servidor\n\n");

       ServerSocket s = new ServerSocket(9999);   //isto tem de estar criado senao rebenta
       Socket c = s.accept();

       ObjectInputStream i = new ObjectInputStream(c.getInputStream());
       ObjectOutputStream o = new ObjectOutputStream(c.getOutputStream());
       o.flush();

       System.out.println("Canais de comunicacao criados\n\n");

       Dados d = (Dados) i.readObject();


       System.out.println("Dados lidos\n\n");

       System.out.println("Dados lidos " + d.toString() );

       //System.out.println(d.toString());
     
    }

}

Classe Dados, que é comum ao servidor e ao cliente

package socketservidor;

import java.io.Serializable;

public class Dados implements Serializable {  //dados

private String nome;
private int idade;
private String localizacao;

public Dados(String nome, int idade, String localizacao) {

	this.nome = nome;
	this.idade = idade;
	this.localizacao = localizacao;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public int getIdade() {
	return idade;
}

public void setIdade(int idade) {
	this.idade = idade;
}

public String getLocalizacao() {
	return localizacao;
}

public void setLocalizacao(String localizacao) {
	this.localizacao = localizacao;
}

@Override
public String toString() {
	return "Dados [idade=" + idade + ", localizacao=" + localizacao
			+ ", nome=" + nome + "]";
}
}

O objectivo deste programa era o seguinte. O programa Cliente deverá tranferir um Objecto do tipo Dados, usando uma socket Tcp, para o programa Servidor. O programa Servidor deverá receber o objecto em questao e imprimir os seus campos no ecra.

No entanto o programa Servidor gera a seguinte excepcao ?

Exception in thread "main" java.lang.ClassNotFoundException: socketcliente.Dados
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:319)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:332)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:621)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1592)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1513)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1749)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1346)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
        at socketservidor.Main.main(Main.java:24)
Java Result: 1

Ja pesquisei na net mas não encontrei nada que me ajudasse a resolver o meu problema. Se alguem que ja teve o mesmo problema pudesse ajudar , eu ficaria muito agradecido.

Muito obrigado pela colaboração.

Link to comment
Share on other sites

Saudações. 😄

Eu criei dois projectos no netbeans. Um contem a classe Cliente e Dados e outro contem a classe Servidor e a classe Dados. A classes Dados do dois projectos são exctamente iguais , copy paste. A classe Cliente está incluida no mesmo package que a classe dados ,e no outro projecto é a mes,ma situação. 👍

Link to comment
Share on other sites

Saudações. 🙂

Quando estive a investigar na net tambem ouvi esse termo , e tentei ver se o meu erro era isso. No entanto depois mudei o import da classe Dados para import.java.io.Serializable mudei para import java.io.* .  ?

Bem mais um erro estupido que me fez perder um hora da minha vida.🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.