On Wed, Nov 10, 2010 at 08:23, Brad Lira <[email protected]> wrote:
> client side:
>
> address_book.SerializeToString(&mystr)
> strncpy(buf, mystr.c_str(), strlen(mystr.c_str()));
This is an error - you only copy to the first \0 byte (strlen looks
for a nul-terminated string) -- however, the string contains binary
data.
And: why do you copy the data in the first place to some buffer ? This
is an additional (potentially expensive) memory copy; why not use the
buffer directly from the string ?
sendto(socket, mystr.data(), mystr.size() ...)
> sendto(socket, buf, ....)
>
> server side:
>
> recvfrom(socket, buf, ....)
> mystr.assign(buf, strlen(buf));
>
> if (address_book.ParseFromString(mystr) == false)
> {
> print "deserialization failed"
> }
>
> I get deserialization failed all the time, but get the message correctly
> though.
>
> Maybe this method is not the right way to send string across socket.
> I tried using SerializeToFileDescriptor(socket), that worked on the
> client side, but on the server side, i never get the message with UDP sockets.
> is there a better way of sending data across network?
>
> thanks,
>
>
> On Tue, Nov 9, 2010 at 5:43 PM, Kenton Varda <[email protected]> wrote:
>> It sounds like you probably have extra bytes at the end of mystr which are
>> not part of the protobuf. The parser parses everything before those bytes
>> just fine, but then chokes when it gets to the bytes it doesn't recognize.
>> Please make sure you only pass in the exact bytes which came out of the
>> serializer at the other end, no more, no less.
>>
>> On Tue, Nov 9, 2010 at 1:11 PM, Brad Lira <[email protected]> wrote:
>>>
>>> I have a c++ client/server application that sends messages using
>>> protocol buffers, however, at the server side, when i call
>>>
>>> address_book.ParseFromString(mystr)
>>>
>>> it returns false, but it actually gets the message correctly from
>>> client side, so i am not sure why it thinks that parsing has failed.
>>> any ideas?
>>>
>>> thanks,
>>> brad
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Protocol Buffers" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/protobuf?hl=en.
>>>
>>
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/protobuf?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"Protocol Buffers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/protobuf?hl=en.