Я согласен с Брайаном.Вы, вероятно, получаете время ожидания при первом чтении, а не во втором.Однажды установленный тайм-аут остается в силе, пока вы не измените его снова.
Ваш второй вызов чтения, когда вы читаете «сообщение», кажется, предполагает (а), что оно прочитает все сообщение, и (б) чтотайм-аут, если все сообщение не приходит в течение 5 секунд.Это не работает так.Время ожидания истекает, если Ничего не поступит в течение 5 секунд, или иначе , будет считано все полученное, вплоть до message.length.Но это может быть только один байт.
Вы должны использовать DataInputStream.readFully()
для чтения всего сообщения, и вам необходимо полностью пересмотреть свою стратегию тайм-аута.