Прежде всего, я не программист java. Однако tcp-соединения работают так же в других языках программирования.
TCP-соединения основаны на потоке, то есть нет начала или конца сообщения. TCP гарантирует только то, что данные поступают в правильном порядке.
Если вы отправляете «CMD_POPUP» и «foo» сразу после друг друга, вы не знаете, получите ли вы «CMD_POPUP», "CMD_POPUPfoo", "CMD_PO" et c. на другой стороне. Поскольку между каждым отправлением вы ожидаете определенное время c, данные обычно приходят один за другим. Но это не гарантировано, и я также считаю, что это не очень чистый способ сделать это.
Самый простой способ обойти это - отправить начальный символ в начале, символы-разделители между параметрами и конечный символ после каждого сообщения. например, "# CMD_POPUP% foo% bar $" или что-то в этом роде. Таким образом, вы можете записывать все, что получаете, в буфер, пока не получите конец сообщения, а затем обработать его.