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
Uma API de baixo nível com as seguintes abstrações:
Uma API de alto nível com as seguintes abstrações:
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
O serviço do NIST está disponível no host
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
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 (
Segue o código completo da classe que consulta o referido serviço:
A execução do código gerou o seguinte resultado, que representa o dia 14/02/2011 às 17h11m13s.
Teste o código, altere a classe e utilize um
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
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
- URIs, que representam Universal Resource Identifiers.
- URLs, que representam Universal Resource Locators.
- Connections, que representam conexões para recursos apontados pelas URLs.
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