Одной из идей может быть чтение фрагмента файла по фрагменту, например:
Псевдокод
#define CHUNK_SIZE 1000
void send(){
uint8_t buff[CHUNK_SIZE];
int actually_read;
while((actually_read = read(fd, buff, sizeof(buff)) > 0)
sendto(sock_fd, buff, actually_read, 0);
}
Вы должны добавить некоторую проверку ошибок, ноИдея состоит в том, чтобы прочитать значительное количество байтов из файла, который вы хотите отправить, и отправить это количество.На стороне сервера вы должны сделать то же самое, читая из сокета прибывающие куски и записывая их в файл.Возможно, вы захотите добавить префикс некоторых метаданных к buff
, просто чтобы сообщить серверу, какой файл вы передаете, если вы хотите обрабатывать несколько передач файлов.Поскольку FTP использует TCP, вы не должны беспокоиться о потере данных.
Опять же, это всего лишь идея.Я полагаю, есть несколько способов сделать это.