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