java - Serialized Object loses data -
i created java server , client applications communicates rmi. in order client "meet" server, i'm sending multicast datagrampacket client. happens instantiate class attribute localdirectory , when recieve it, comes has null. important object i'm trying send implements seriaizable.
what think i'm doing wrong?
(if need aditional code let me know)
public static void main(string[] args) throws remoteexception { localdirectory = new file("c:\\tempfiles".trim()); servertotransmit = (serverinterface) new server(localdirectory); if (!localdirectory.exists()) { system.out.println("directory " + localdirectory + " not exist!"); return; } if (!localdirectory.isdirectory()) { system.out.println("the path " + localdirectory + " not directory!"); return; } if (!localdirectory.canread()) { system.out.println("without reading permissions on " + localdirectory + "!"); return; } try { system.out.println("vou criar o registry"); registry registry; try { system.out.println("registry lauching try in port " + 7609 + "..."); registry = locateregistry.createregistry(7609); system.out.println("registry launched!"); } catch (remoteexception e) { system.out.println("registry in execution already!"); registry = locateregistry.getregistry(); } system.out.println("será que criei?"); //create service //serverinterface service = new server(localdirectory); server server = new server(localdirectory); registry.bind(service_name, server); system.out.println("service " + service_name + " registered on registry."); multicastsocket sock = new multicastsocket(7000); //225.15.15.15 e o porto 7000. inetaddress addr = inetaddress.getbyname("225.15.15.15"); sock.joingroup(addr); //sock.settimetolive(1); datagramsocket psock; while (true) { try { bytearrayoutputstream bout = new bytearrayoutputstream(); objectoutputstream out = new objectoutputstream(bout); out.writeobject(servertotransmit); //out.writeunshared(objecttotransmit) in order avoid caching issues out.flush(); byte[] data = bout.tobytearray(); datagrampacket packet = new datagrampacket(data, data.length, addr, 7000); system.out.println("sizeeee: " + bout.size()); sleep(3000); sock.send(packet); } catch (socketexception ex) { logger.getlogger(server.class.getname()).log(level.severe, null, ex); } catch (ioexception ex) { logger.getlogger(server.class.getname()).log(level.severe, null, ex); } } /* if (args.length > 0 && args[0].equals("leader")) { playleader(sock, psock, addr); } else { playfollower(sock, psock, addr); } sock.leavegroup(addr);*/ } catch (remoteexception e) { system.out.println("remote error - " + e); system.exit(1); } catch (exception e) { e.printstacktrace(); } and i'm receiving on client (only put important code):
multicastsocket sock = new multicastsocket(7000); //225.15.15.15 e o porto 7000. inetaddress addr = inetaddress.getbyname("225.15.15.15"); sock.joingroup(addr); sock.settimetolive(1); system.out.println("passou aqui_!"); datagrampacket packet = new datagrampacket(new byte[1024], 1024, addr, 7000); sock.receive(packet); system.out.println("passou aqui_1!"); objectinputstream in = new objectinputstream(new bytearrayinputstream(packet.getdata(), 0, packet.getlength())); system.out.println("passou aqui_2!"); serverinterface returnedobject = (serverinterface) in.readobject(); system.out.println("returned object local dir -> " + returnedobject.getlocaldirectory()); thanks!
so, cover possibilities include excluded question, attribute localdirectory either:
- was null when serialized
- is
static - is
transient - isn't written custom
writeobject()method - isn't assigned custom
readobject()method - wasn't present in version of class got serialized in version got deserialized
- is lost somewhere in
writereplace()/readresolve()megillah.
Comments
Post a Comment