Hi Oliver, Thank you for your reply! Am Mittwoch, 24. Juli 2013 11:19:01 UTC+2 schrieb Oliver: > > On Wed, Jul 24, 2013 at 8:22 AM, Lotte R. Leben > <[email protected]<javascript:> > > wrote: > >> >> *But* As far as I know readDelimited() only works with inputStreams, >> which kind of contradicts the whole UDP thing. >> Since adding the delimiter was a tad tricky, I wasn't confident that the >> following would work: >> >> - add delimiter in python as mentioned above >> - receive datagram in java >> - read first bit to know length = n >> - read next n bytes >> - PacketMessage.parseFrom(chunkOfnBytes) >> > > Should be fine. May be simplest to wrap your bytearray in a > CodedInputStream directly via CodedInputStream.newInstance(). > But see below - if the contents of the UDP datagram is entirely message > data you shouldn't need a separate length at all. > > Or if there is no other data in the UDP datagram you could just use the >>> datagram length directly (i.e. get rid of the trailing garbage - why are >>> you padding the datagram in the first place?) >>> >>> >> We are not padding it on purpose and I'd love to know how or why that >> garbage data got in there. :( >> > > If you are using DatagramSocket.receive(DatagramPacket) this probably > means you are not looking at packet.getLength() on return. The datagram > received is read into the array owned by DatagramPacket, but it may not > fill the entire array so you need to inspect and use the actual length > returned rather than using the whole array. You want something > approximately like this: > > DatagramPacket p = new DatagramPacket(new byte[MAX_DATAGRAM_SIZE], > MAX_DATAGRAM_SIZE); > socket.receive(p); > PacketMessage message = > PacketMessage.parseFrom(CodedInputStream.newInstance(p.getData(), > p.getOffset(), p.getLength())); >
Just a Question– Since we have different Protobuf messages, we have a variety of lengths the payload of an incoming packet could have. Am I correct in the assumption that the approach above only works when we know the exact size the protobuf data is going to be? > > If that's not the problem, then I would look at the datagram on the wire > (via e.g. wireshark) to see if the garbage is present there - that'd narrow > it down to sender or receiver at least. > I'l do that. > > Oliver > > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/groups/opt_out.
