Похоже, вы открываете новое соединение каждый раз в messageTransmit (через вызов connectToServer), но вы никогда не закрываете это соединение. Я не уверен, приведет ли это к блокированию, которое вы испытываете, но это то, что вы должны исправить.
Либо вы хотите оставить свое соединение открытым и повторно использовать его; в этом случае у вас должен быть метод checkConnection, который проверяет, открыто ли текущее соединение, а если нет, то открывает его; или вы хотите каждый раз открывать новое соединение, и в этом случае вам следует закрыть соединение, как только вы закончите получать ответ от сервера.
Что касается блокировки, это также может произойти, если буфер отправки для вашего TCP-соединения заполнен. Вызов os.writeObject и / или os.flush может блокироваться, если буфер отправки ОС заполнен. Чтобы отменить это, вы должны использовать инфраструктуру NIO, такую как Netty (или, по крайней мере, очередь и отдельный поток) для отправки вашего сообщения. Возможно, вы захотите проверить на своем сервере, какие данные он получает, чтобы увидеть, вызывает ли это вашу блокировку.