Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: winsock-http передача картинки  (Прочитано 13008 раз)
0 Пользователей и 1 Гость смотрят эту тему.
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« : 07-10-2011 17:15 » 

Пытаюсь ответить на запрос браузера Received string "GET /blabla.png HTTP/1.1

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

bytecount = send(*csock, buffer, buffer_len, 0)
передать в buffer , заголовок http ответа + код картинки

пробовал
                FileHandle = CreateFileA("C:\\blabla.bmp",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
               Size = GetFileSize(FileHandle, &Size);
                if(Size>255) Size=255;
                ReadFile(FileHandle, Line, Size, &R, NULL);
          *(Line+R)=0;
               CloseHandle(FileHandle);
через sprintf потом обьеденял заголовок и код картинки прочтенный.. проблема что идет преобразования в чар? избежать можно используя DWORD? затем в чар через static_cast,dynamic_cast?
Цитата
Server is listening on socket... 127.0.0.1:1101б
waiting for a connection
Received connection from 127.0.0.1waiting for a connection
Received bytes 376
Received string "GET / HTTP/1.1
Host: 127.0.0.1:1101
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cache-Control: max-age=0

"
Sent bytes 187
Send string "HTTP/1.1 200 OK
Proxy-Connection: close
Content-Language: ru
Content-Length: 100

<html><head></head><body>It Works!<br><img src="http://127.0.0.1:1101/blabla.png
"</img>/body></html>"
Received connection from 127.0.0.1waiting for a connection
Received bytes 389
Received string "GET /blabla.png HTTP/1.1
Host: 127.0.0.1:1101
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://127.0.0.1:1101/
Cache-Control: max-age=0

"
Sent bytes 290
Send string "HTTP/1.1 200 OK
Proxy-Connection: close
Content-Length: 116

13780787113102610000137372688200030003820002177434 232000911272891150011180011181
21022112625200038736865841202189911279178116774855 112129616815415029952996171621
97144802724812349718168201301768181249255970000736 978681746696130"
Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 07-10-2011 18:38 » 

sprintf насколько я знаю, это для работы с текстовым буфером. А тебе надо файл передавать в бинарном виде.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« Ответ #2 : 07-10-2011 18:48 » 

Цитата
бинарном виде
делал через бинарник fopen() mode "rb" открывает двоичный файл для чтения
читал его
fp0 =  fopen("c:\\blabla.bmp","rb");
int ch0;
        while(1) {
                ch0 = fgetc(fp0);
       if(ch0!=EOF){...
                  вот тут опять втыкнул sprintf, и он наверное бинарник переделал в цыфры.. получалось похожее..
                  наверное надо через индексацию..указатели?
                   ...
                 }
       else break;
Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 07-10-2011 18:54 » 

А сделать класс накопитель. Который может через метод append добавлять как текстовую, так и бинарную информацию? А потом через этот класс уже отдавать инфу через сокет?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« Ответ #4 : 07-10-2011 20:05 » new

 хм string &append(cont string &strob, size_type start, size_type num); оно? на выходе получится стринг, его конвертировать в чар? отдавать инфу.. ок попробую
осталось файл прочесть как надо)) вопрос как? чем...
   
Цитата: попытка 25 здравый смысл ушел)) паника
DWORD Line[50000];
    HANDLE FileHandle;
    DWORD Size;

    FileHandle = CreateFileA("C:\\blabla.bmp",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
   int bytes = GetFileSize(FileHandle, &Size);
   DWORD ReadBytes = static_cast<DWORD>(bytes);
     ReadFile(FileHandle, Line ,static_cast<DWORD>(bytes) , &ReadBytes, NULL);
     CloseHandle(FileHandle);
   
    buffer_len = sprintf (buffer, "HTTP/1.1 200 OK\r\nProxy-Connection: close\r\nContent-Length: %d\r\n\r\n%s", Size, Line);

   if((bytecount = send(*csock, buffer, buffer_len, 0))==SOCKET_ERROR){
      fprintf(stderr, "Error sending data %d\n", WSAGetLastError());
      goto FINISH; 
   }
Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 07-10-2011 22:16 » 

осталось файл прочесть как надо)) вопрос как? чем...
Функцией read, поблочно? и отсылать так же поблочно, прямо по мере чтения, чтобы буфер не особо копить.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 08-10-2011 04:49 » 

LightSin, любой текстовый накопитель как только встретит байт с значением 0, тут же прекрашает дальше обрабатывать блок. В твоей фотографии, я так думаю, таких байтов море. 
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 08-10-2011 05:45 » 

LightSin, а еще в твоем http-сервере не отдаются обязательные для HTTP 1.1 заголовки. Например, Content-type. Если твоя программа не сервер, а серверное приложение (CGI), то нужные заголовки подставит сервер, но вот Content-type в этом случае будет, быстрее всего, text/html или text/plain, когда как для передачи картинки нужен другой MIME-тип.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« Ответ #8 : 08-10-2011 15:29 » 

ок, спасиб, попробуем.  ченть да получится... :Улыбаюсь
Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
LightSin
The question title sounds to me the same as "Convert banana into a pistol"... :-)
Постоялец

ru
Offline Offline
id/fm105


« Ответ #9 : 08-10-2011 19:49 » 

урах3))
  :Улыбаюсь
Цитата
Received connection from 127.0.0.1waiting for a connection
Received bytes 350
Received string "GET / HTTP/1.1
Host: 127.0.0.1:1101
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive

"
Sent bytes 188
Send string "HTTP/1.1 200 OK
Proxy-Connection: close
Content-Language: ru
Content-Length: 101

<html><head></head><body>It Works!<br><img src="http://127.0.0.1:1101/blabla.bmp
"</img></body></html>"
Received connection from 127.0.0.1waiting for a connection
Received bytes 363
Received string "GET /blabla.bmp HTTP/1.1
Host: 127.0.0.1:1101
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://127.0.0.1:1101/

"
Sent bytes 887
Send string "HTTP/1.1 200 OK
Proxy-Connection: close
Content-Length: 822

BM6♥"
Код:
int buf_read_len;
  char * buf_read;

  ifstream is;
  is.open ("c:\\bla.bmp", ios::binary );

  // get length of file:
  is.seekg (0, ios::end);
  buf_read_len = is.tellg();
  is.seekg (0, ios::beg);

  // allocate memory:
  buf_read = new char [buf_read_len];

  // read data as a block:
  is.read (buf_read,buf_read_len);
  is.close();

  buffer_len = sprintf (buffer, "HTTP/1.1 200 OK\r\nProxy-Connection: close\r\nContent-Length: %d\r\n\r\n", buf_read_len);
  for(int c=0; c != buf_read_len; c++) buffer[buffer_len++]=buf_read[c];
  buffer[buffer_len]='\0';


if((bytecount = send(*csock, buffer, buffer_len, 0))==SOCKET_ERROR){
fprintf(stderr, "Error sending data %d\n", WSAGetLastError());
goto FINISH; 
}

* wer.jpg (11.47 Кб - загружено 1797 раз.)
Записан

Lost in the jungle: 1c, PIC AVR, C++, Python flask, (no Java) JS . for fun: Live For Speed S2 Drift Edition, TeeWorlds
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines