#c #file #sockets #ftp #send
#c #файл #сокеты #ftp #Отправить
Вопрос:
Я пытаюсь создать клиент FTP-сервера. Я написал эту функцию для отправки файлов, но она работает не для всех файлов. Хотя она работает для некоторых файлов, таких как jpg, когда дело доходит до ppt или других файлов, это создает проблему. Я пытаюсь отправлять 100 байт каждый раз файла, над которым я работаю в ubuntu 18.04
ранее я пробовал библиотечную функцию для отправки файла через сокет. но это также не помогло.
void sendfiledata(int sockfd, char * filename) {
FILE * file;
unsigned long fileLen;
file = fopen(filename, "rb");
//Get file length
fseek(file, 0, SEEK_END);
fileLen = ftell(file);
fseek(file, 0, SEEK_SET);
long int loop = fileLen / 100;
long int remainfile = fileLen % 100;
buffer = (char * ) malloc(fileLen);
fread(buffer, fileLen, sizeof(char), file);
fclose(file);
send(sockfd, amp; fileLen, sizeof(int), 0);
int i = 0;
char chunk[100];
for (int j = 0; j < loop; j ) {
int k = 0;
while (i < fileLen amp;amp; k < 100) {
chunk[k] = buffer[i];
i ;
k ;
}
send(sockfd, chunk, 100, 0);
}
if (remainfile > 0) {
int k = 0;
while (i < fileLen amp;amp; k < remainfile) {
chunk[k] = buffer[i];
i ;
k ;
}
send(sockfd, chunk, remainfile, 0);
}
memset(filename, '', sizeof(filename));
}
я хочу, чтобы файлы были полностью отправлены с одного компьютера на другой. но здесь некоторые файлы работают, но не все.
Комментарии:
1. ваш код слишком сложный … и можете ли вы рассказать, насколько велик файл, который вы пытаетесь отправить, когда он НЕ работает?
2. Что именно означает «это создает проблему»? Что происходит и что вы хотите, чтобы произошло?
3. Ваш способ отправки длины файла очень подозрителен, см. Мой ответ
4. Вы должны правильно и полностью обработать результат, возвращаемый системными вызовами, такими как send() .
5. Я пытаюсь отправить все виды файлов, несмотря на их размер.