Sinal EOF ou EOT com sockets

Publicado por Juno Roesler em 28/07/2012

[ Hits: 5.998 ]

 


Sinal EOF ou EOT com sockets



Olá galera.

Hoje vim contribuir com a solução de uma dúvida que me atormentou por meses.

Esta dica não é necessariamente sobre Java, mas para qualquer linguagem que trabalhe com Bytes e sockets para comunicação em rede.

Quando trabalhamos com sockets, ao comunicar-se com outros serviços e servidores, geralmente existe a necessidade de comunicar a outra ponta do fim da transmissão, porém, sem fechar o socket ou canal de comunicação.

Eu pesquisei isso by Google e em diversos fóruns (guj, stackoverflow, coderanch, exampledepot e vários outros) por +/- dois meses e nada, muitos disseram que não tinha como representar isso.

O mais próximo que cheguei foi um artigo na Wikipedia, falando sobre EOT (que seria 0x04), mas não funciona.

Bom, eu pensei, se navegadores e proxys conseguem isso, TEM que existir uma forma. Então, tive a ideia de construir um servidor para ficar 'escutando' conexões de navegadores e analisando o conteúdo, Byte por Byte.

Após um bom trabalho de análise nos Bytes, eu descobri. E agora venho compartilhar com vocês.

O sinal EOF ou EOT (não sei qual é o correto para esse caso) é: 0x0d0a

Só isso!

Até agora testei com navegadores, servidor proxy Squid e servidor Web Tomcat, e todos entendem que terminei de transmitir e a conexão permanece aberta.

Para enviar esse sinal através do socket, precisamos converter em Bytes, então:

int eof = 0x0d0a;
byte[] bs = new byte[2];
bs[0] = (byte) (eof >> 8);
bs[1] = (byte) (0x00ff & eof);
socket.getOutputStream().write(bs);
socket.getOutputStream().flush();


Abraço, espero que ajude.

Dica previamente publicada em:

Outras dicas deste autor

Ubuntu 8.04 no notebook CCE W93

Leitura recomendada

Sistemas Distribuídos - Aplicação simples Java RMI

Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]

Transferência de arquivos binários em Java

Usando sockets em Java - Comunicação com um servidor

Ralink RT2870/RT3070 Wireless Adapter no Debian Squeeze

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts