В C (UNIX), как я могу передать и получить файл в нескольких блоках с помощью сокета?Перенос файла в блоки
Например, если у меня был файл байт, а размер блока 500, я бы передать:
- 500 байт,
- затем 500 байт,
- затем 234 bytes
Я попытался использовать fseek, читать, писать, но я просто не могу получить логику. Даже хорошая рекомендация будет высоко оценена.
Мои сокетов подпрограммы:
int readn(sd, chunk, bytesToRead);
int writen(sd, chunk, bytesToWrite);
Что не работает правильно? Проверяйте эти функции отдельно, комментируя всю дальнейшую часть ..... просто проверяйте ее эхо (cout) файл чтения на консоль – Xinus
Возможно, вы неправильно поняли, как работают сокеты. Если вы используете подключенный (TCP) сокет, тогда данные концептуально являются потоком.Фактические вызовы для чтения и записи делают кусок данных за раз, но им не обязательно соответствовать. Читатель и писатель могут использовать любые размеры, которые им нравятся, просто обязательно проверьте возвращаемые значения. Только с сокетами UDP (без установления соединения), которые читатель и писатель должен манипулировать одними и теми же фрагментами, и вам редко нужен UDP, за исключением некоторых высокопроизводительных ситуаций. –
Итак, предположим, что писатель пишет 500 байтов, затем 500, затем 234, успешно. Затем читатель может читать до 1234 байта в одном запросе на чтение, если он снабжает достаточно большой буфер. Точно так же, если писатель записывает 1234 байта за один раз, тогда нет ничего плохого в чтении считывателя в блоках 500 или 128 или любом другом размере. Сеть прерывает поток в пакеты под обложками, но вы можете игнорировать это, если вы не используете UDP. И когда вы пишете или читаете сокет, вы почти наверняка никогда не должны использовать поиск. –