Sinal EOF ou EOT com sockets

Publicado por Juno Roesler em 28/07/2012

[ Hits: 5.996 ]

 


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

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

Transferência de arquivos binários em Java

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

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

Autoestudo e certificação C/C++

  

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