В стороне клиента, прочитать код:ява NiO SocketChannel читать всегда возвращают те же данные
byte[] bytes = new byte[50]; //TODO should reuse buffer, for test only
ByteBuffer dst = ByteBuffer.wrap(bytes);
int ret = 0;
int readBytes = 0;
boolean fail = false;
try {
while ((ret = socketChannel.read(dst)) > 0) {
readBytes += ret;
System.out.println("read " + ret + " bytes from socket " + dst);
if (!dst.hasRemaining()) {
break;
}
}
int pos = dst.position();
byte[] data = new byte[pos];
dst.flip();
dst.get(data);
System.out.println("read data: " + StringUtil.toHexString(data));
} catch (Exception e) {
fail = true;
handler.onException(e);
}
Проблема заключается в socketChannel.read() всегда возвращает положительный, я проверил обратный буфер, данные дублирующие N раз, ему нравится, что позиция буфера сокета низкого уровня не движется вперед. Есть идеи?
Спасибо за ваш быстрый повтор. Это канал сокета, подключаемый к серверу Netty. Я отправляю один запрос на сервер, сервер возвращает всего 48 байт, код выполняется только тогда, когда selector.select() return и selectionKey читается. Поэтому я полностью смутился. –
BTW, как я упоминал в заголовке, то, что я читал из socketChannel, это возврат 48 байтов с сервера, проблема в том, что я всегда могу прочитать те же данные из socketChannel. И поскольку данные верны, поэтому я могу их декодировать, поэтому это никогда не останавливается :-( –
Таким образом --- это не ошибка в вашем коде. Можете ли вы уточнить, какие данные вы читаете из Netty? – jayunit100