Как правильно распределить одновременное получение данных на Socket?
======================================================================

 Столкнулся вот с такой проблемой. Есть сервер и n-количество клиентов. Каждый клиент может запросить некоторую инфу с сервера, например, текущее время. Но, помимо этого, сервер каждые 10 минут сам отправляет время на клиента. Еще немного подробностей, клиент посылает запрос - и ответом на него сервер посылает время.  

 Но как быть, *когда клиент посылает запрос серверу и одновременно в это время сервер отправляет свою 10-минутную рассылку?*  

Получается следующее - сервер может попытаться отправить данные по запросу и рассылку одним пакетом(TCP/IP) - результатом будет время, которое продублировано и остается еще один нюанс. Клиент то ожидает только одну строку, например, и хочет получить только ее одну, а приходит несколько.   
  

Я уже думал, что для рассылки стоит новое соединение выделить, но мне кажется, что слишком ресурсоемко.  

Помогите совет, пожалуйста. 

 Ответ оказался прост. Никак. Данные одновременно нельзя получить из одного соединения, т.к. у каждого соединения только один поток ввода и один поток вывода.  

Решения оказалось таким - и рассылка погоды, и простые ответы сервера посылались со специальным префиксом команды (обычный текст, например обычный ответ за запрос клиента - response: Текст ответа; а рассылка начиналась с delivery: Текст ответа рассылки). Ответы я читаю в двух местах - место ожидания рассылки и место ожидания простого ответа на команду клиента, но **обработка происходила в одном месте**. То есть парсил свой ответ я в одном месте. А слушателя у меня два. Всем спасибо за ответы. 

 Строго говоря, в TCP нет понятия *отдельного пакета* - это относится к более выскому уровню взаимодействия приложений. TCP предоставляет возможность передавать *поток байт*. Да, внутри TCP этот поток разбивается и передается внутри пакетов, но приложение не должно влезать в этот процесс.  
  

Разбивку сообщений на *собственные* пакеты для отправки может себе организовать программист. Формат такого пакета - минимальный заголовок  

```
struct mheader
{
    uint32_t type;
    uint32_t data;
};
```
и следом за ним сразу данные.  
  

Если применена классическая архитектура многопоточного сервера (на каждое соединение - свой поток), не составит большого труда это организовать.  
  

Хорошая книжка - [Йон Снейдер, Эффективное программирование TCP/IP](http://www.ozon.ru/context/detail/id/126048/)  
![1004494083.jpg](//habrastorage.org/files/574/cf2/785/574cf2785c144ed7863a5099c510a5c7.jpg) 

 Судя по вопросу данные дублируются. Можно попробовать варианты:  

-читать только первую строку там где не рассчитано на большее  

-ввести таймаут на любые посылки сервера одному клиенту(если данные дублируются не полностью, за время таймаута можно их аггрегировать)