I\'m writing a java file-transfer app, and i have some troubles with deserialisation myself-defined class Message from Datagramms.
Other topics at StackOverflow has simi
Are you sure you have received all of the bytes for the serialized objects? A DatagramSocket uses UDP under the hood. Are you sure that all of the packets have arrived?
Also, is it really a good idea to use UDP for transferring a serialized object? This is one case where TCP would seem to be more approriate. UDP does not guarantee delivery or delivery order which could easily cause a corrupted stream.
You should also really put a private static final long serialVersionUID = 1L;
on your Message class.
receiveMSG = (Message) deserialize(receivedPacket.getData());
You need to change this to
receiveMSG = (Message) deserialize(receivedPacket.getData(), receivedPacket.getOffset(), receivedPacket.getLength);
and adjust your 'deserialise()' method accordingly, to accept 'offset' and 'length' parameters, and to use them when constructing the ByteArrayInputStream.
EDIT The code you posted doesn't compile: the expression that constructs the outgoing datagram packet is incorrect. It should be
new DatagramPacket(test, test.length, datagramSocket.getInetAddress(), datagramSocket.getPort())
I have no idea what packetOverhead
is supposed to be, but you don't need it.
NB You don't need to create a new Message()
the line before you call readObject().