The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"получение данных от сервера"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"получение данных от сервера"
Сообщение от dvorkin emailИскать по авторуВ закладки(ok) on 14-Ноя-04, 16:43  (MSK)
есть следующая проблема:
Написал прогу, которая качает заданные файлы с интернет, прога живет под юниксом, работает через сквид, юзает http протокол. Текстовые файлы качает нормально, а при закачивании архивов, фоток и т.д начинаются проблемы.
Сервер вместо того чтоб вернуть заголовки и данные, он отдает только заголовки. Если рассмотреть следующую функцию
numbytes=recv(sockfd,line,MAXDATA-1,0)
то numbytes==3954 (размер файла и заголовки),
а strlen(line)==364 (только заголовки).
При чем MAXDATA==8000000.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "получение данных от сервера"
Сообщение от Soldier Искать по авторуВ закладки(??) on 14-Ноя-04, 17:24  (MSK)
>есть следующая проблема:
>Написал прогу, которая качает заданные файлы с интернет, прога живет под юниксом,
>работает через сквид, юзает http протокол. Текстовые файлы качает нормально, а
>при закачивании архивов, фоток и т.д начинаются проблемы.
>Сервер вместо того чтоб вернуть заголовки и данные, он отдает только заголовки.
>Если рассмотреть следующую функцию
>numbytes=recv(sockfd,line,MAXDATA-1,0)
>то numbytes==3954 (размер файла и заголовки),
>а strlen(line)==364 (только заголовки).
>При чем MAXDATA==8000000.

strlen  0  за конец строки считает,  а в нетекстовых данных этих нолей вагон и маленькая тележка, так что 364 это скорее позиция первого нуля в line


  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "получение данных от сервера"
Сообщение от dvorkin emailИскать по авторуВ закладки(ok) on 14-Ноя-04, 22:53  (MSK)
>strlen  0  за конец строки считает,  а в нетекстовых
>данных этих нолей вагон и маленькая тележка, так что 364 это
>скорее позиция первого нуля в line

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


  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "получение данных от сервера"
Сообщение от dvorkin emailИскать по авторуВ закладки(??) on 16-Ноя-04, 02:49  (MSK)
попробовал сделать так:
MAXDATA=2000;
for (;;){
    numbytes=recv(sockfd,line,sizeof(line)-1,0);
    line[numbytes]='\0';
    fprintf(res_fd,"%s",line);
    if (numbytes<=0){
       break;
    }
    printf("%d-%d\n",numbytes,strlen(line));
}  

Теперь файл записывается, но не полностью... Тоесть файл занимает 3954, а сервер отдает 2965 вместе с заголовками...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "получение данных от сервера"
Сообщение от Soldier Искать по авторуВ закладки(??) on 16-Ноя-04, 16:11  (MSK)
>попробовал сделать так:
>MAXDATA=2000;
>for (;;){
>    numbytes=recv(sockfd,line,sizeof(line)-1,0);
>    line[numbytes]='\0';
>    fprintf(res_fd,"%s",line);
>    if (numbytes<=0){
>       break;
>    }
>    printf("%d-%d\n",numbytes,strlen(line));
>}
>
>Теперь файл записывается, но не полностью... Тоесть файл занимает 3954, а сервер
>отдает 2965 вместе с заголовками...

Мне так лень объяснять очевидные вещи... Вместо fprintf используйте write
для нетекстовых данных:

int fd=fileno(res_fd);
write(fd,line,numbytes);

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "получение данных от сервера"
Сообщение от chip emailИскать по авторуВ закладки(ok) on 16-Ноя-04, 21:27  (MSK)
>попробовал сделать так:
>MAXDATA=2000;
>for (;;){
>    numbytes=recv(sockfd,line,sizeof(line)-1,0);
>    line[numbytes]='\0';
>    fprintf(res_fd,"%s",line);
>    if (numbytes<=0){
>       break;
>    }
>    printf("%d-%d\n",numbytes,strlen(line));
>}
>
>Теперь файл записывается, но не полностью... Тоесть файл занимает 3954, а сервер
>отдает 2965 вместе с заголовками...

/tmp % cat ex.c
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main() {
  int fd, l;
  char buf[BUFSIZ] = { 0 };

  if (-1 == (fd = open("/bin/ls", O_RDONLY)))
  {
    perror("open failed");
    exit(EXIT_FAILURE);
  }
  l = read(fd, buf, BUFSIZ);
  fprintf(stderr, "%d vs %d\n", l, strlen(buf));
  close(fd);
  return 0;
}
/tmp % gcc ex.c -o ex
/tmp % ./ex
1024 vs 8
/tmp % hd -C /bin/ls | head -1
00000000  7f 45 4c 46 01 01 01 09  00 00 00 00 00 00 00 00  |.ELF............|
/tmp %


На мысли наводит ?

/me не Це программист...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "получение данных от сервера"
Сообщение от dvorkin emailИскать по авторуВ закладки(??) on 17-Ноя-04, 00:50  (MSK)
Разобрался... работает... всем большое спасибо за помощь


  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру