On Sun, Jul 10, 2011 at 7:07 AM, Enrico Viappiani <[email protected]>wrote:
> I've got a java server and a c++ client, client sends a message to the
> server.
>
> In a first moment we had the message structure made by simple format
> like strings or integers, and the message sending/receiving with
> serialization and deserialization were working perfectly.
>
> Nowadays we added a "enum" in the structure and now on the java side,
> the deserialization doesn't work anymore:
>
> c++ client sending:
>
> bool Client::SendMsg(const char* pStr)
> {
> if (send(m_iSock, (char *) pStr, strlen(pStr), 0) == -1) //
> send(id_socket,stringa,lunghezza stringa,flags)
>
You should not use strlen on protobuf encoded data. You're probably
serializing the enum value with integer value 0, which gets encoded as the
null char on the wire. As a result, your C++ client is not sending any data
after the enum tag.
> {
> perror("Client::SendString, send");
> return false;
> }
> return true
> }
>
> //on the client'smain
> ss=(const char*)malloc(1000);
> ss = obj.c_str();
> mylink.SendMsg(ss);
>
> java server receiving:
>
> public int ReceiveMsg() throws IOException
> {
>
> InputStream InMsg = sock.getInputStream();
> ProtoMessage Msg = ProtoMessage.parseFrom(InMsg); //THIS
> THROWS THE ERROR
> sock.close;
> }
>
>
> the error is:
> Exception in thread "main"
> com.google.protobuf.InvalidProtocolBufferException: While parsing a
> protocol message, the input ended unexpectedly in the middle of a
> field. This could mean either than the input has been truncated or
> that an embedded message misreported its own length.
> at
>
> com.google.protobuf.InvalidProtocolBufferException.truncatedMessage(InvalidProtocolBufferException.java:
> 49)
> at
> com.google.protobuf.CodedInputStream.refillBuffer(CodedInputStream.java:
> 711)
> at
> com.google.protobuf.CodedInputStream.readRawByte(CodedInputStream.java:
> 734)
> at
> com.google.protobuf.CodedInputStream.readRawVarint32(CodedInputStream.java:
> 338)
> at
> com.google.protobuf.CodedInputStream.readInt32(CodedInputStream.java:
> 198)
>
>
> On the other side otherwise c++ client can deserialize the stream
> perfectly.
> I'm gettin mad, without the enum the send/receive is working!
> any ideas?
> thanks in advance
> Enrico
>
> --
> 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.