Показать сообщение отдельно
  #1  
Старый 16.07.2012, 16:09
Yarcim Yarcim вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 9
Репутация: 10
По умолчанию Как разграничить данные сетевых потоков?

Может быть тема не совсем понятная , но вопрос в следующем:
Имеется клиент-серверное приложение реализованное через idTCPClient и idTCPServer. Приложение сервер снимает изображение и звук с вебкамеры и передает его разными потоками клиенту (звук и изображение берутся разными компонентами). Программа клиент по таймеру сообщает программе серверу о необходимости отправки аудио или видеоданных (get_vid, get_aud). Программа сервер по execute отправляет данные по запросам. Таймер отправки аудиоданных -фиксирован. Таймер отправки видеоданных варьируется. Данные отправляются memoryStream'ами.
В общем сущность проблемы:
Когда видеотаймер устанавливается на низкий интервал (50-100мс) иногда получается так, что данные предназначенные для аудио попадают в видеобработчик, и наоборот. Я понимаю почему это происходит, но не понимаю как мне разделить их так, чтобы независимости от значения таймеров после команды клиента по отправке видоеданных, приходили только видеоданные, а после отправки клиентом команды получения аудио приходили только они. И никогда не нарушали бы этот порядок.
Происходит примерно так:
Код:
Клиент: WriteLn('Get_aud')
            readStream(aud_stream)

Сервер: if ReadLn = 'Get_aud' then 
            writeStream(Aud_stream)

Тоже самое и по видео. Но иногда после команды клиента get_aud приходит кусок из vid_sream, соответственно вызывая всякие баги.

ух... постарался изложить как мог понятнее...

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

Условия: должен использоваться только один порт.
Ответить с цитированием