javac++data-conversionhtonl

c++ server htons to java ntohs client conversion


I am creating a small TFTP client server app where server is developed using c++ and client using java.

Here i am sending "block count" value using htons conversion.

But i am not able to convert it back to its original value at client.

For example if am sending block count ntohs(01) (2 bytes) from server to client. Client is reading in bytes. Value which I am receiving is byte 0 and byte 1.

Please if any one can provide a solution.


Solution

  • I take it you meant that you use ntohs to decode the values read from the network, and htons to encode the values sent over the network.

    Look into ByteBuffer#getShort() in concert with ByteBuffer#order(ByteOrder). Network byte order is big endian, so use the value ByteOrder#BIG_ENDIAN to configure your ByteBuffer properly. Note that BIG_ENDIAN is the default order, but in this case it would be good form to state your preference explicitly.


    You didn't mention what you're using for network communications in Java. If it's a java.net.Socket, you can call Socket#getChannel() to get a java.nio.channels.SocketChannel, a subtype of java.nio.channels.ByteChannel, with which you can use ByteBuffer to read and write data.