Hej,
Piszę aplikację typu klient-server i mam potrzebę przesyłania między klientem, a serwerem serializowanych obiektów. Gdy klient i serwer są odpaleni jako dwa różne wątki tej samej aplikacji to wszystko jest ok. Niestety, gdy klient zaimplementowany jest w jednej aplikacji, a serwer w drugiej to przy próbie czytania obiektu przez serwer z ObjectInputStream za każdym razem dostaję wyjątek ClassNotFoundException.
Oto przykładowy kod (dla czytelności wyrzuciłem znaczną część obsługi wyjątków):
Serwer:
public void createServer() throws Exception
{
ServerSocketChannel server = null;
ObjectInputStream ois = null;
SocketChannel socket = null;
server = ServerSocketChannel.open();
server.socket().bind(new InetSocketAddress(7777));
socket = server.accept();
System.out.println("Nowe polaczenie przychodzace");
ois = new ObjectInputStream(socket.socket().getInputStream());
try
{
Object obj = ois.readObject(); // <-- tutaj mi wywala ClassNotFoundException
}
catch (ClassNotFoundException e)
{
System.out.println("ClassNotFound");
}
catch (Exception e)
{
System.out.println("Other exception");
}
socket.close();
ois.close();
server.close();
}
I kod klienta przesyłającego obiekty do serwera (znajdującego się w innej aplikacji):
public void createClient() throws Exception
{
SocketChannel socket = null;
ObjectOutputStream oos = null;
socket = SocketChannel.open(new InetSocketAddress(7777));
oos = new ObjectOutputStream(socket.socket().getOutputStream());
oos.writeObject(new SomeClass()); // <-- dowolna klasa zdefiniowana wewnatrz aplikacji klienta (impl Serializable)
oos.flush();
oos.close();
socket.close();
}