Невозможно отправить двоичные данные через сокет unix tcp

Я пытаюсь реализовать команды ftp GET и PUT через сокет UNIX для передачи файлов, используя обычные функции, такие как fread (), fwrite (), send () и recv ().

Он отлично работает для текстовых файлов, но не работает для двоичных файлов (diff говорит: "двоичные файлы отличаются")

Будем благодарны за любые предложения относительно следующего:

  1. Существуют ли какие-либо конкретные команды для чтения и записи двоичных данных?
  2. Можно ли использовать diff для сравнения двоичных файлов?
  3. Можно ли отправить двоичные части в куски памяти?

2 ответа

Протокол FTP имеет 2 режима работы: текстовый и двоичный. попробуйте это в любом FTP-клиенте - я считаю, что команды для переключения между ними - ASCII и BIN. Текстовый режим имеет эффект только из того, что я помню на парах CR/LF.

Если вы читаете из файла, а затем записываете данные файла в сокет, обязательно откройте файл в двоичном режиме.

Да, diff можно использовать для сравнения двоичных файлов, обычно с параметром -q для подавления фактической печати различий, что редко имеет смысл для двоичных файлов. Вы также можете использовать md5 или cmp, если они у вас есть.

Другие вопросы по тегам