Проблема с вашей реализацией в том, что метод write записывает только один байт, см. Документацию . Важное предложение здесь: «24 старших разряда b игнорируются». Так что stream.write(msg.length());
, вероятно, не делает то, что задумано. (Я предполагаю, что msg.length () возвращает int, поправьте меня, если я ошибаюсь.)
Попробуйте написать четыре байта целого:
stream.write(msg.length() % 256);
stream.write((msg.length() / 256) % 256);
stream.write((msg.length() / (256 * 256)) % 256);
stream.write((msg.length() / (256 * 256 * 256)) % 256);
Сначала записывает младший байт, вы можете изменить порядок, если хотите. Вы можете выполнять преобразование в байты также со сдвигом битов, разделение выглядит для меня более понятным, но это вопрос личного вкуса.