Как правильно распределить одновременное получение данных на Socket?
Строго говоря, в TCP нет понятия отдельного пакета - это относится к более выскому уровню взаимодействия приложений. TCP предоставляет возможность передавать поток байт. Да, внутри TCP этот поток разбивается и передается внутри пакетов, но приложение не должно влезать в этот процесс.
Разбивку сообщений на собственные пакеты для отправки может себе организовать программист. Формат такого пакета - минимальный заголовокstruct mheader
{
    uint32_t type;
    uint32_t data;
};и следом за ним сразу данные.
Если применена классическая архитектура многопоточного сервера (на каждое соединение - свой поток), не составит большого труда это организовать.
Хорошая книжка - Йон Снейдер, Эффективное программирование TCP/IP
Ответ оказался прост. Никак. Данные одновременно нельзя получить из одного соединения, т.к. у каждого соединения только один поток ввода и один поток вывода.
Решения оказалось таким -  и рассылка погоды, и простые ответы сервера посылались со специальным префиксом команды  (обычный текст, например обычный ответ за запрос клиента  -  response: Текст ответа; а рассылка начиналась с delivery: Текст ответа рассылки). Ответы я читаю в двух местах - место ожидания рассылки  и место ожидания простого ответа на команду клиента, но обработка происходила в одном месте. То есть парсил свой ответ я в одном месте. А слушателя у меня два. Всем спасибо за ответы.