I am communicating with a server, each message sent to the server has to be padded with the length of the message,
unsigned int len = htonl(msg.size());
In C running the length through htonl and padding the message works, in Java AFAIK byte order is already in network order so I assumed all I have to do is write the string length before the message to the stream, but this does not work am I missing something?
stream.write(msg.length());
stream.write(msg.getBytes());
Stream is an OutputStream.
Problem with your implementation is, that the write-method writes only one byte, see the documentation. The important sentence here is: ‘The 24 high-order bits of b are ignored.’ So
stream.write(msg.length());probably doesn’t do what is intended. (I assume msg.length() returns an int, correct me if I’m wrong here.)Try to write the four bytes of an int:
That writes the least significant byte first, you can change the order if wished. You can do the converting to bytes also with bit-shifting, division looks more understandable for me, but that is a question of personal taste.