Socket: Enviando imagem para navegador

Olá pessoal,

Estou desenvolvendo para estudo um mini-webserver. Consigo fazer o webserver receber as requisições GET de arquivos texto (html, css, xml, txt, etc) e imprimi-las no browser do requisitante. Ocorre que não estou conseguindo fazer o envio de imagens e outros arquivos que não sejam no formato texto para o browser do requisitante.

Para enviar/imprimir no browser uma mensagem texto utilizo o seguinte código:

BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
output.write("<html><head>... Mensagem<br>testando<br>blabla ...  \r\n"); 
output.flush(); 
output.close();

Mas como fazer para enviar/imprimir uma imagem? Vale lembrar que quem deverá receber esse arquivo é o navegador (IE, Mozilla, Opera, etc).

Obrigado desde já.
Rafael S. Fijalkowski

Vc tem que setar o header do http para o browser entender
ex: “Content-Type: image/png”

Bom, duas coisas que vão lhe ajudar bastante:

  • Ler os standards (a definição do protocolo http está em http://www.w3c.org/Protocols/ , mais precisamente em http://www.w3c.org/Protocols/rfc2616/rfc2616.html )
  • Ver o que um web server normal envia para o browser, nessas circunstâncias. Para tanto, veja se consegue achar um “sniffer” de rede (por exemplo, o pcap no Linux, ou o Network Monitor, se estiver usando Windows NT / 2000 / XP / 2003 - é um programa que é um dos componentes do Windows e pode ser instalado depois da instalação do Windows. O Network Monitor também está disponível em uma versão completa, com o Backoffice 4.5 (SMS). Acho que existe uma ferramenta semelhante, mas que normalmente é usada para testar web services, só não lembro o nome. O funcionamento é bastante simples: você deixa esse programa rodando em uma determinada porta, e você configura o browser como se esse programa fosse um proxy server. Aí todo o tráfego tem de passar por esse programa, em vez de ir diretamente para o web server, permitindo-lhe visualizar exatamente o que está acontecendo.