Вы уже (обязательно) устанавливаете какой-то формат или протокол, посредством которого строки отправляются туда и обратно - либо вы каким-то образом завершаете каждую строку, либо отправляете сначала ее длину, либо тому подобное. (По сути, TCP - это просто поток, поэтому без такого протокола получатель не сможет узнать, когда команда или вывод завершены! -)
Итак, какой бы подход вы ни использовали для разделения строк, просто сделайте так, чтобы результаты, отправляемые обратно с сервера на клиент, представляли собой две строки каждый раз, одна из которых - описание ошибки (пусто, если нет ошибка), другой результат команды (пусто, если нет результатов). Это будет тривиально и для отправки, и для получения / анализа, и с минимальными издержками (отправка пустой строки должна быть такой же простой, как отправка только терминатора или длины 0).