Pular para o conteúdo

Sinal EOF ou EOT com sockets

Dica publicada em Java / Rede
Juno Roesler juno.rr
Hits: 6.633 Categoria: Java Subcategoria: Rede
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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();
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.


Abraço, espero que ajude.

Dica previamente publicada em:

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Ubuntu 8.04 no notebook CCE W93

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

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

Resolvendo o problema "could not load wizard specified in /wizard.inf" no Ubuntu Hardy

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.