Pular para o conteúdo principal

Java e Redes: Consultando um serviço com Socket

Introdução

Neste post será abordada a utilização da Plataforma Java para desenvolvimento de um aplicativo de rede que consulta a um serviço do NIST- National Institute of Standars and Technology que fornece o horário oficial do EUA.
*Para saber mais visite http://www.time.gov/about.html e http://tf.nist.gov/tf-cgi/servers.cgi.

JSE e Networking

A Plataforma Java na sua versão padrão disponibiliza API que torna simples o desenvolvimento de aplicativos para rede. Conforme a própria documentação o pacote java.net pode ser dividido em duas seções:

Uma API de baixo nível com as seguintes abstrações:
  • Addresses, que representam identificadores de rede como endereços IP
  • Sockets, que representam mecanismo para comunicação bidirecional
  • Interfaces, que representam interfaces de rede
Uma  API de alto nível com as seguintes abstrações:
  • URIs, que representam Universal Resource Identifiers.
  • URLs, que representam Universal Resource Locators.
  • Connections, que representam conexões para recursos apontados pelas URLs.
No JSE são disponibilizadas também fábricas para criação de sockets no pacote javax.net.

Exemplo

Implementaremos o exemplo utilizando comunicação via TCP, que estabelece uma conexão confiável entre dois computadores. Neste contexto entenda como confiável, a garantia de entrega dos pacotes.

No exemplo utilizaremos a classe java.net.Socket que representa um endpoint para comunicação entre duas máquinas, e obteremos da resposta enviada pelo serviço através do fluxo de dados de leitura (InputStream) do Socket.

O serviço do NIST está disponível no host time-A.timefreq.bldrdoc.gov na porta 13, então será criado um socket para o serviço, conforme segue:
String host = "time-A.timefreq.bldrdoc.gov";
int porta = 13;
Socket socket = new Socket(host, porta);

Este construtor pode lançar duas exceções checadas, UnknownHostException, caso não seja possível determinar o endereço IP do host informado, e IOException, caso ocorra erro de I/O (entrada/saída) na criação do socket, além de poder lançar uma exceção não checada SecurityException, caso ocorra algum problema de segurança.

Após o Socket criado podemos obter o seu fluxo de dados por meio do método getInputStream(), como pode ser observado a seguir:
InputStream socketReader = socket.getInputStream();

E então podemos realizar a leitura do fluxo de dados obtido. Para realizar tal leitura faremos uso de classes que permitem a leitura do stream binário (socketReader) como um stream de caractere (charsReader) otimizado (lineReader), conforme código abaixo:

InputStream socketReader = socket.getInputStream();
InputStreamReader charsReader = new InputStreamReader(socketReader);
BufferedReader lineReader = new BufferedReader(charsReader);

Segue o código completo da classe que consulta o referido serviço:

package br.eti.castro.blog.samples.networking;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

public class ConsultaTimeServiceNIST {
 
 //o tratamento de excessoes foi simplificado 
 //(throws UnknownHostException, IOException)
 //para simplificar o entendimento do exemplo
 public static void main(String[] args) throws UnknownHostException, IOException {
  //declarando de objetos para a leitura do fluxo do socket
  BufferedReader lineReader = null;
  InputStreamReader charsReader = null;
  InputStream socketReader = null;
  String line = null;
  
  //criando o socket
  //para o host time-A.timefreq.bldrdoc.gov na porta 13
  String host = "time-A.timefreq.bldrdoc.gov";
  int port = 13;
  Socket socket = new Socket(host, port);
  //recuperando o fluxo de dados
  socketReader = socket.getInputStream();
  //montando o fluxo de leitura otimizado 
  charsReader = new InputStreamReader(socketReader);
  lineReader = new BufferedReader(charsReader);
  //enquanto existirem linhas para serem lidas
  //as mesmas srão impressas na saida padrao
  while((line = lineReader.readLine())!=null){
    System.out.println(line);
  }
  //fechamento do socket
  socket.close();
 }
}

A execução do código gerou o seguinte resultado, que representa o dia 14/02/2011 às 17h11m13s.

55606 11-02-14 17:11:13 00 0 0 0.0 UTC(NIST) * 

Teste o código, altere a classe e utilize um java.text.SimpleDateFormat para realizar a conversão do texto para um objeto da classe java.util.Date.

Até mais!
Marcelo de Castro
http://twitter.com/mcastroinfo
http://www.globalcode.com.br/instrutores/MarceloCastro
Outros posts: http://blog.globalcode.com.br/search/label/MarceloCastro

Comentários

Postagens mais visitadas deste blog

Você já pensou em ser palestrante em algum evento ?

Você já deve ter participado de algum evento e pensado como deve ser legal ser palestrante... E para falar a verdade, é muito bom mesmo. Eu adoro, o Vinicius adora e conheço muitas pessoas que curtem cada minuto da participação no evento como palestrante. Com certeza é uma responsabilidade a mais. Você sente medo, adrenalina, tem que se preparar. Literalmente coloca a cara a tapa para qualquer pessoa te avaliar em todos os sentidos. Qual o seu tom de voz?  Seus slides são legais? Você manja mesmo ?  Seu português está ok?  E as palavras em inglês ?  Teve algum deslize técnico? E MUITO mais.  Mas é claro que a exposição tem dois lados... e os resultados podem ser ótimos. Normalmente conhecemos mais pessoas como palestrantes e podem surgir boas oportunidades de negócio. É sempre positivo ter uma nova referência positiva quando as pessoas buscam nosso nome no Google, podemos fazer a diferença para quem está assistindo a palestra e muito mais.  No The Developer's

TDC INNOVATION lança University Pass

Modalidade de ingresso tem como objetivo ajudar na capacitação dos universitários Uma pesquisa realizada em 2020 pela Associação Brasileira das Empresas de Tecnologia da Informação e Comunicação (Brasscom) diz que até o ano de 2024 o Brasil precisará de cerca de 420 mil profissionais na área de Tecnologia da Informação. Porém, por ano, a mesma pesquisa diz que o país forma apenas 46 mil profissionais capacitados no nicho. Pensando nisso, para ajudar na formação e capacitação desses jovens profissionais, o TDC INNOVATION, segunda edição do ano do The Developer's Conference, lança o University Pass, modalidade de ingresso que possibilita aceso digital gratuito a todas as palestras do evento, ou com 50% de desconto para quem preferir ir pessoalmente. Com o tema central “Desafios para a criação do futuro Digital”, o TDC INNOVATION ocorrerá entre 1 e 3 de junho, de forma híbrida: presencialmente no Centro de Convenções CentroSul, em Florianópolis, e com transmissão simultaneamente pela

Inscrever sua equipe em eventos de TI vale a pena? Entenda aqui

Os eventos de TI são importantes para o aprendizado contínuo, especialmente em uma área tão dinâmica, como a de tecnologia. A necessidade de estar sempre por dentro das tendências pode esbarrar em algumas objeções, como investir em especializações pouco práticas ou opções pulverizadas de mercado. Por isso, participar de conferências e assistir palestras de especialistas é uma excelente oportunidade para sua equipe se desenvolver. O melhor de participar de eventos de TI é expandir os conhecimentos e habilidades independentemente da experiência específica, seja um desenvolvedor web ou full stack, por exemplo, as conferências de tecnologia podem ajudar o profissional a se aperfeiçoar. Isso ocorre devido ao contato com outros especialistas e colegas da mesma área. Além disso, é possível descobrir novas soluções e fazer networking . Neste artigo, você conhecerá as vantagens da sua equipe participar em eventos de TI. Aproveite a leitura! Vantagens de participar de eventos de TI Se o seu ob

Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados

Nesse post, diferente dos últimos que foram mais enfáticos nas experiências com tecnologias, vou focar um pouco mais nos profissionais que estão começando, ou pretendem ingressar na área de desenvolvimento de software, falando sobre conceitos fundamentais relacionados a programação em geral . Mercado de trabalho para programação Conforme já sabemos, o mercado de desenvolvimento de software, especialmente no Brasil, continua em franca expansão, sendo que cada vez mais as empresas buscam desenvolver seus próprios sistemas usando as mais diferentes e novas tecnologias. Algumas matérias interessantes: As seis profissões mais valorizadas em 2010 no IDG Now! Muitas vagas e sensação de reaquecimento da economia Por isso, a área de desenvolvimento de software tem despertado interesse em muitos profissionais de outras áreas que desejam mudar de profissão, já que as oportunidades de trabalho tendem a ser maiores. Esse é um perfil presente em muitos dos clientes da Globalcode que acabou m

Segurança da informação no alvo: o que esperar do futuro?

A segurança da informação não se trata apenas de proteger os dados contra acesso não autorizado. Na prática, refere-se aos recursos que impedem: uso; registro; inspeção; divulgação; interrupção; modificação; destruição de dados. O uso de dados pode abranger desde um perfil nas redes sociais a detalhes financeiros, biometrias ou novos projetos. Por isso, a preocupação com a proteção dos dados é crescente, tanto para empresas quanto clientes. Para muitas pessoas, a coleta de dados é considerada invasão de privacidade, criando desconfiança do titular dos dados, pois o uso dos dados pode ser facilmente corrompido, utilizado para fins não declarados. Apesar de o uso dos dados terem impulsionado os avanços tecnológicos na última década, as organizações lidam com o desafio de distinguir dados de informações pessoais de modo a proteger a privacidade e as preferências dos clientes. Neste artigo, abordaremos o impacto da segurança da informação e o que esperar do futuro. Confira casos conhecido

TDC ONLINE: SUA PLATAFORMA DE PALESTRAS GRAVADAS DO TDC DISPONÍVEL

Além do conteúdo ao vivo transmitido online nas edições do TDC, agora você pode ter acesso à centenas de palestras gravadas, através da nossa nova plataforma de vídeos - o TDC Online, que reúne todas as Trilhas premium, Stadium e Salas dos Patrocinadores das edições anteriores de 2022, TDC Innovation e TDC Connections.  Para acessar, basta clicar na edição em que você participou ( TDC Innovation ou TDC Connections ); Fazer o mesmo login (com e-mail e senha) cadastrados na hora de adquirir ou resgatar o seu ingresso no TDC; E clicar na Trilha de sua opção, e de acordo com a modalidade do seu ingresso. Logo em seguida, você será direcionado para a seguinte página com a lista de todas as palestras por Trilha: Pronto! Agora você tem acesso à centenas de palestras gravadas da sua área de interesse, para assistir como e quando quiser! Caso tenha esquecido a senha, clique na opção "Esqueci a senha" , insira o e-mail que você realizou para o cadastro no evento, e aparecerá a op