3

I need to send a Network Order short for a game server I'm writing using Java. I read about network order, but I couldn't find any details about a short that is sent before the data. Could someone explain to me what it is, and how to send one to a client with Java?

phpscriptcoder
  • 717
  • 2
  • 9
  • 22

3 Answers3

8

Java NIO bytes buffers have support for changing the byte order. Network byte order is Big Endian therefore.

// Allocate a big endian byte buffer
ByteBuffer bb = ByteBuffer.allocate(4096);
bb.order(ByteOrder.BIG_ENDIAN);
bb.putShort(12345);

// Write the buffer to an NIO channel
bb.flip();
channel.write(bb);

Byte Order is the order in which the bytes for numerical values that are larger than a single byte are stored. There are 2 flavours Big Endian (most significant byte first) and Little Endian (least significant byte first).

Michael Barker
  • 14,153
  • 4
  • 48
  • 55
2

In java, a short int is a 2 byte quantity. Network byte order send the high-order byte first, followed by the next highest-order byte and so on, with the low order byte sent last. If you have an OutputStream o, and a short i, then

o.write((i >> 8) & 0xff);
o.write(i & 0xff);

send the short in network byte order. I recommend using a DataOutputStream which has a method writeShort() (and writeInt, writeLong, etc.) which automatically write in network byte order.

President James K. Polk
  • 40,516
  • 21
  • 95
  • 125
0

You can wrap your OutputStream with DataOutputStream.

You can then use DataOutputStream.writeShort. By contract the method writes data in network order.

Alexander Pogrebnyak
  • 44,836
  • 10
  • 105
  • 121