Вывод картинки
Если открыть то открывается картинка в редакторе, если сохранить то сохраняется на диске
А какого оно в IE не отображается ?
Заголовки для имжа такие :
HTTP/1.1 200 OK
Date: Fri, 10 Jul 2004 15:57:00 GMT
Server: My Server
Content-Length: 65201
Content-Type: image/jpg
{тут идет двоичное содержимоу имиджа}
#include "stdafx.h"
#include <winsock2.h>
#define SERVERPORT 6666
int main(int argc, char* argv[])
{
char buff[1024];
char query[1024];
WSAStartup(0x0202,(WSADATA *) &buff[0]);
SOCKET servsocket;
sockaddr_in serv_addr;
SOCKET client_socket;
sockaddr_in client_addr;
servsocket=socket(AF_INET,SOCK_STREAM,0);
if (servsocket<0) return 0;
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVERPORT);
serv_addr.sin_addr.s_addr=0;
if (bind(servsocket,(sockaddr *) &serv_addr, sizeof(serv_addr))) return 0;
if (listen(servsocket, 1)) return 0;
int client_addr_size=sizeof(client_addr);
char buffer[100000]={0};
while((client_socket=accept(servsocket, (sockaddr *) &client_addr, &client_addr_size)))
{
FILE* f = fopen("pano1.jpg","r+b");
long s = fread(buffer,1, sizeof(buffer),f);
fclose(f);
recv(client_socket,query,sizeof(query), 0);
char answer[100000] = {0};
sprintf(answer, "HTTP/1.1 200 OK\r\nDate: Fri, 17 Jul 2003 13:20:00 GMT\r\nServer: LID Server\r\nContent-Length: %i\r\nContent-Type: image/jpg\r\n\r\n",s);
send(client_socket,answer, strlen(answer),0);
send(client_socket,buffer, s,0);
::closesocket(client_socket);
FILE* f2 = fopen("c:\\log","w+b");
s = fwrite(answer,1, sizeof(answer),f2);
fclose(f2);
}
::closesocket(servsocket);
return 0;
}
Мне вот надо сидеть на порту и как только клиент подконектился кинуть ему в браузер картинку. Я вроде хедеры правильно передаю. Оно предлагает сохранить/открыть файл.
Если открыть то открывается картинка в редакторе, если сохранить то сохраняется на диске
А какого оно в IE не отображается ?
Заголовки для имжа такие :
HTTP/1.1 200 OK
Date: Fri, 10 Jul 2004 15:57:00 GMT
Server: My Server
Content-Length: 65201
Content-Type: image/jpg
{тут идет двоичное содержимоу имиджа}
#include "stdafx.h"
#include <winsock2.h>
#define SERVERPORT 6666
int main(int argc, char* argv[])
{
char buff[1024];
char query[1024];
WSAStartup(0x0202,(WSADATA *) &buff[0]);
SOCKET servsocket;
sockaddr_in serv_addr;
SOCKET client_socket;
sockaddr_in client_addr;
servsocket=socket(AF_INET,SOCK_STREAM,0);
if (servsocket<0) return 0;
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVERPORT);
serv_addr.sin_addr.s_addr=0;
if (bind(servsocket,(sockaddr *) &serv_addr, sizeof(serv_addr))) return 0;
if (listen(servsocket, 1)) return 0;
int client_addr_size=sizeof(client_addr);
char buffer[100000]={0};
while((client_socket=accept(servsocket, (sockaddr *) &client_addr, &client_addr_size)))
{
FILE* f = fopen("pano1.jpg","r+b");
long s = fread(buffer,1, sizeof(buffer),f);
fclose(f);
recv(client_socket,query,sizeof(query), 0);
char answer[100000] = {0};
sprintf(answer, "HTTP/1.1 200 OK\r\nDate: Fri, 17 Jul 2003 13:20:00 GMT\r\nServer: LID Server\r\nContent-Length: %i\r\nContent-Type: image/jpg\r\n\r\n",s);
send(client_socket,answer, strlen(answer),0);
send(client_socket,buffer, s,0);
::closesocket(client_socket);
FILE* f2 = fopen("c:\\log","w+b");
s = fwrite(answer,1, sizeof(answer),f2);
fclose(f2);
}
::closesocket(servsocket);
return 0;
}
Не совсем по теме, но что ты там творишь с WSADataz? Вроде надо
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
return;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
WSACleanup( );
return;
}
HTTP/1.1 200 OK
Date: Fri, 10 Jul 2004 15:57:00 GMT
Server: My Server
Content-Length: 65201
Content-Type: image/jpg
{тут идет двоичное содержимоу имиджа}
Что значит "двоичное содержимое"?
Base64 ?
Да я про то если в браузер "плевать" то что выше я привел, то IE предлагает сохранить или открыть другим приложением. А вот Opera, Mozilla без проблем открывает.
Извини я немного уточню. Ты принимаешь запрос от клиента на коннект, создаёшь его и тут же высылаешь клиенту этот "проблемный" ответ, или высылаешь html файл с тегом "img", src которого в свою очередь включает запрос к твоему серверу на исходник картинки? Если я не ошибаюсь, то IE примет этот твой ответ только таким образом.
стоп. с клинта шлется GET запрос на документ. я создаю хедеры для ответа и высылаю файл. Прикол в том что во всех браузерах открывается кроме IE
В принципе, по правилам, браузер должен принимать от сервера html. Если ты высылаешь ему что-либо иное, то тем самым ты предоставляешь ему самому выбрать как это интерпретировать: распознать картинку и сгенерировать html для её отображения (посмотри хотя бы исходники страниц в браузерах где всё получается), или принять её как любой другой файл(теоретически это правильнее - браузер ничего не должен "додумывать", весь процесс должен быть под контролем программиста).