Передача файла дополнительные строки печатаются - PullRequest
1 голос
/ 25 января 2012

Привет всем, это расширение моего предыдущего вопроса. Вот ссылка

Приложение для передачи файлов

Я добавил '/ n' в концемоего имени файла и успешно получить имя файла вместе с данными в файле.но есть некоторая проблема, что после того, как моя серверная сторона прочитала байты от сокетов до '/ n', она также записывает странное утверждение в начале моего файла

ORBIT_SOCKETDIR = / tmp / orbit-cv

может кто-нибудь сказать мне, что происходит.как избежать этого при хранении в моем файле

вот мой фрагмент кода client.c

 char * filename = strrchr(argv[3],'/'); // extracting file name from path
    *filename++; filename[strlen(filename)] = '\n'; // putting /n at the end of file name n = write(sockfd, filename, strlen(filename));
    bzero(buffer,256); FILE *f = fopen("file.txt" ,"rb");  // opening the file 
    size_t bytes = 0; 

    // sending the actual data in the file
    while((bytes = fread(buffer ,sizeof(char) ,sizeof(buffer) ,f))>0) 
       send(sockfd ,buffer ,bytes , 0); 

server.c

 while(ch[0] != '\n')    // here reading the filename
{
    n = read(newsockfd,ch,1);
    filename[i] = ch[0];
    printf("ch %c " , ch[0]);
     i++;
}


 FILE *f = fopen(filename ,"wb");

// reading the actual data and writing it in the file 
while((bytes = recv(newsockfd ,buffer , sizeof(buffer) ,0))>0)
   fwrite(buffer,sizeof(char) ,bytes , f);

1 Ответ

2 голосов
/ 25 января 2012

Вы пытаетесь добавить символ к argv[3] на месте. Однако нет гарантии , что для него выделено достаточно памяти для размещения дополнительного символа.

Кроме того, как только вы заменили терминатор NUL на \n, вы забыли добавить новый терминатор NUL.

В итоге: выделите достаточно памяти для argv[3] плюс \n плюс NUL, скопируйте в него строку и, наконец, добавьте \n и NUL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...