Из-за объема информации, которую вы нам предоставили, мы можем давать только глобальные подсказки, такие как: вы убедились, что ваш поток сокетов не буферизован и что вы flush()
после записи информации?
Возможно, данные ожидают в буфере, ожидая отправки для отправки.
Edit:
Вы установили SocketChannel в неблокирующий режим, так что вы правы, предполагая, что позаботится о сбросе на отправляющей стороне, я предполагаю, что клиент не буферизует свой ввод?
Возможно, проблема в том, что SocketChannel.write () не гарантируется для записи всего буфера, но может вернуться рано. Вам нужно заключить записи в цикл while, чтобы отслеживать записанные байты, чтобы убедиться, что ваши данные действительно записаны в канал. Процитирую Javadoc:
Если не указано иное, запись
операция вернется только после
запись всех r запрошенных байтов.
Некоторые типы каналов, в зависимости от
их состояние, может написать только некоторые из
байты или, возможно, ни одного вообще. A
канальный сокет в неблокирующем режиме ,
например, больше не могу писать
байтов, чем свободно в сокете
выходной буфер.