Linux slogan
Visite também: BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

Sinal EOF ou EOT com sockets
Linux user
Publicado por Juno Roesler em 28/07/2012

Login: juno.rr, 26112 pontos
[ Hits: 1215 ]

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

Leitura recomendada
   Dica Linux recomendada Usando sockets em Java - Comunicação com um servidor
   Dica Linux recomendada Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]
   Dica Linux recomendada Transferência de arquivos binários em Java
   Dica Linux recomendada Instalando impressora HP P1005 Laser no Ubuntu 9.04
   Dica Linux recomendada Atualizando o seu Fedora com o Preupgrade

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.