Я пытаюсь написать прокси-сервер на языке C под Linux. Он работал нормально (у меня было ощущение, что он работает нормально), пока я не попробовал его для потокового мультимедиа.
Дай мне сначала рассказать о проблеме, а потом я перейду к потоковому мультимедиа. Чтобы прочитать входящие данные с веб-сайта и передать их фактическому клиенту, я делаю это
count = read(websitefd,buffer,BUFSIZ);
write(clientfd,buffer,count);`
в непрерывном цикле, пока я не прочитаю все данные в этом сокете.
Теперь проблема в том, что если фактический веб-сайт отправляет HTTP-пакет с полем длины содержимого в размере 1025 байт и другой частью данных в других пакетах, то я все равно всегда жду BUFSIZ (8192 байта), а затем отправляю 8192 байта на клиентскую машину все вместе . для обычного octet-stream
он работает нормально, хотя я знаю, что это неправильный метод, потому что я должен пересылать пакеты так же, как и реальный сервер. Итак, если фактический сервер отправляет мне 2 пакета размером 1024 и 1024 байта, я отправляю клиенту пакет размером 2048 байт, причем первый пакет с заголовком HTTP говорит, что длина содержимого составляет 900 байт (остальные все предполагаются заголовком http), но на самом деле Я пересылаю клиенту пакет размером 2048 байт. Для типа контента: application/octet-stream он просто загружает все это и отображает либо в виде изображения, либо в виде html-текста, либо просит меня сохранить его.
Когда клиент запрашивает потоковое мультимедиа, по указанной выше причине клиент не может воспроизвести видео. Так что мне теперь делать? Спасибо, что прочитали мой вопрос. Пожалуйста, помогите мне. :)