On Wed, Oct 20, 2010 at 3:28 AM, Paul <mjpabl...@gmail.com> wrote:
> Hi,
>
> I am sending messages from a C++ client to a Java server, but I am
> wondering about the length of the buffer I am using to send it over.
> This is the C++ code:
>
> CLIENT SIDE CODE:
> *** the protocol buffers message is called snap1 ***
>
> int numBytesForDelim = sizeof(int);
> char *snap_buf2;
> snap_buf2 = new char[snap1.ByteSize() + 100];
>
> ZeroCopyOutputStream* raw_output = new ArrayOutputStream(snap_buf2,
> snap1.ByteSize()+numBytesForDelim);
>            CodedOutputStream* coded_output = new
> CodedOutputStream(raw_output);
>
> coded_output->WriteVarint32(snap1.ByteSize());
> snap1.SerializeToCodedStream(coded_output);
>
> delete coded_output;
> delete raw_output;
>
> send(socket, snap_buf2, snap1.ByteSize()+numBytesForDelim/2, 0);  //
> send over a socket
> delete [] snap_buf2;
> snap_buf2 = NULL;
>
> When I send this over to the Java server side, the Java code uses
> "parseDelimitedFrom" to parse the data.  however, I am not sure why
> when I call send, the length of the message has to be snap1.ByteSize()
> +numBytesForDelim/2 rather than snap1.ByteSize()+numBytesForDelim.  I
> would think that it would be the latter, but when I try it, I get
> exceptions on the Java side saying that the protocol message has not
> filled out all the fields.  For some reason, it is necessary for me to
> cut off the last two bytes when sending over TCP.  Any ideas as to why
> this is?

I dont know this in detail, but in my experience with java and c++ i
needed swap the two bytes before the buffer containing the length.
the length of the buffer is sent before the buffer from java to c++
using the java byte order.
I dont know if this applies, but you should print out the first two
bytes and try swapping them. Look up my old messages or code for
details.
mike

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to