У меня есть общий вопрос о recv-функции winsock. Я пишу программу с клиент-серверной архитектурой, где клиент отправляет изображение камеры на сервер, и сервер отправляет другое изображение обратно клиенту. Клиент отправляет несколько изображений, пока программа не будет закрыта. И сервер будет отвечать на каждое полученное изображение другим изображением.recv-функция winsock
Клиент (отправить) ----> Сервер (получить) ----> Сервер (отправить) ----> Клиент (получить). ^ _ __ _ __ _ __ _ ____LOOP_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _ |
Моя проблема - это функция приема серверов. Если я вызываю функцию приема несколько раз с большим буфером размером 512 бит, как узнать, что я получил изображение целиком? Примеры, которые я нашел, просто подождите, пока соединение не будет закрыто (recv возвращает 0), но я хочу получить несколько изображений, не закрывая соединение. Но если я получу до тех пор, пока в буфере не останется никаких байтов, функция recv остановит поток до появления новых байтов (но этого никогда не произойдет, потому что сервер сначала хочет отправить свое собственное изображение обратно клиенту перед получением следующий).
Итак, есть ли возможность сообщить серверу, что все изображение получено, чтобы он мог отправить свое собственное изображение обратно клиенту, не дожидаясь следующего байта или закрытого соединения?
Вы также можете использовать escape-последовательности, но использование заголовка будет более эффективным. – sje397
Простая структура, включая размер и буфер, подходит для этой проблемы или мне нужны серверные отправки/recv-вызовы для передачи одного изображения? – ben
Я бы даже пошел с этим: заголовок проще реализовать, чем итерацию над содержимым данных для обработки/удаления управляющих последовательностей. – Robert