Ваш десериализатор выглядит подозрительно; Сообщения Telnet заканчиваются на \r\n
, а не \\0
.
Использовать десериализатор по умолчанию для telnet (по умолчанию ByteArrayCrLfSerializer
).
Когда десериализатор обнаруживает нормальный конец потока (-1
), между сообщениями он должен выдать SoftEndOfStreamException
, чтобы сообщить платформе, что сокет закрыт. Ваш код продолжает возвращать строку нулевой длины,
/**
* Used to communicate that a stream has closed, but between logical
* messages.
*/
public class SoftEndOfStreamException extends IOException {
Или, как я уже сказал, использовать десериализатор по умолчанию.