Проверка данных, полученных на неблокирующем сервере - PullRequest
0 голосов
/ 15 июля 2010

Я создаю неблокирующий сервер с использованием пакета javas NIO и у меня есть пара вопросов о проверке полученных данных.

Я заметил, что когда я вызываю read на канале сокета, он попытается заполнить буфер байтов, в который он читает (согласно документации). Когда я отправляю 10 байтов на сервер от клиента, сервер считывает эти десять байтов в байтовый буфер, остальные байты в байтовом буфере останутся равными нулю, а число, возвращаемое из операции чтения, будет размер моего байтового буфера, хотя клиент записал только 10 байтов.

Я пытаюсь выяснить, есть ли способ получить только количество байтов, отправленных клиентом на сервер, когда сервер читает данные из канала сокета (в приведенном выше случае 10 вместо 1024).

Если это не сработает, я знаю, что могу отделить все фактически полученные данные от клиента от этих «лишних» данных, хранящихся в байтовом буфере, используя разделители в сочетании с моими «заголовками набора команд», а что нет, но кажется, что это должно существовать, поэтому я должен задаться вопросом, упускаю ли я что-то очевидное или есть какая-то причина низкого уровня, почему это невозможно сделать.

Спасибо:)

1 Ответ

1 голос
/ 15 июля 2010

вы, вероятно, забыли вызвать пресловутый flip() в вашем буфере.

buffer.clear();
channel.read(buffer);
buffer.flip();
// now you can read from the buffer
buffer.get...

Мне нужно изменить свою подпись на nio.sucks

...