2010-01-02 3 views
3

Мне нужно отправить сетевой заказ для игрового сервера, который я пишу, используя Java. Я читал о сетевом порядке, но я не мог найти подробностей о коротком, который отправляется перед данными. Может кто-нибудь объяснить мне, что это такое, и как отправить его клиенту с Java?Сетевой заказ короткий (Java)

ответ

6

Буферы с байтами Java NIO поддерживают изменение порядка байтов. Таким образом, порядок сетевых байтов является большим эндианским.

// 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); 

Порядок байтов - это порядок, в котором хранятся байты для числовых значений, превышающих один байт. Есть 2 аромата Big Endian (самый старший байт первый) и Little Endian (младший старший байт).

1

В java короткий int является 2 байтовым количеством. Сетевой порядок байтов сначала отправляет старший байт, а затем следующий старший байт и т. Д., Причем последний байт отправляется последним. Если у вас есть OutputStream o, и short i, затем

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

отправить короткое замыкание в сетевом порядке байтов. Я рекомендую использовать DataOutputStream, который имеет метод writeShort()writeInt, writeLong и т. Д.), Которые автоматически записываются в сетевой порядок байтов.

0

Вы можете обернуть свой OutputStream DataOutputStream.

Затем вы можете использовать DataOutputStream.writeShort. По контракту метод записывает данные в сетевом порядке.

Смежные вопросы