Em Java, como em C e noutras linguagens de programação, é possível recorrer sockets para transmitir dados pela rede. As primitivas genéricas associadas aos sockets são:
Há um conjunto de classes que facilitam o manuseamento de sockets e respetivas primitivas.
Alguns métodos construtores e métodos de instância podem mesmo efetuar mais que uma destas primitivas.
Ver a API de: java.net.Socket
link para java API Doc
Pela análise da documentação, acima, descubra várias sequências de código em Java para estabelecer uma ligação com o protocolo TCP
(no sentido de incluir a funcionalidade desde a criação do socket até ao connect genérico).
InetAddress inet = InetAddress.getByName("alunos.di.uevora.pt");
System.out.println ("IP : " + inet.getHostAddress());
InetAddress inet = InetAddress.getByName("193.137.216.82");
System.out.println ("Host: " + inet.getHostName());
obter o endereço IP do cliente que se ligou via TCP
Socket mySock = myServerSocket.accept();
System.out.println ("Connection from : " +
mySock.getInetAddress().getHostAddress() + ':' + mySock.getPort());
e todas as opções de configuração do socket (no C: SO_TIMEOUT, SO_LINGER, TCP_NODELAY, SO_RCVBUF) são possíveis através de métodos que poderá encontrar na API.
Numa aplicação que usa ligação à rede é necessário efetuar um correto tratamento de exceções, nomeadamente:
ConnectException
NoRouteToHostException
Obtenha o código inicial para esta aula (escolha uma das opções):
Focando-se apenas no código do cliente, altere um pouco a aplicação cliente para que:
Tem de editar apenas o ficheiro EchoClient.java.
Os comandos devem ser executados SEMPRE na pasta base do trabalho (sd02sockets).
Exemplo para executar o cliente (na pasta base do projeto):
# no código com makefile:
$ java -classpath classes sd.EchoClient alunos.di.uevora.pt 8080 "uma mensagem que vai ao servidor"
# no projeto Netbeans: (a diferença será na classpath, build/classes)
$ java -classpath build/classes sd.EchoClient alunos.di.uevora.pt 8080 "uma mensagem que vai ao servidor"
# Eclipse:
$ java -classpath bin sd.EchoClient alunos.di.uevora.pt 8080 "uma mensagem que vai ao servidor"
# IntelliJ IDEA
$ java -classpath out/production/PROJECT sd.EchoClient alunos.di.uevora.pt 8080 "uma mensagem que vai ao servidor"
Teste a execução da aplicação para as 2 modificações pedidas (com e sem 3º argumento, e imprimir no método go()).
(ainda não existe a ligação à rede)
exercício ( cliente acede ao servidor remoto )
Complete a aplicação cliente para executar o serviço “echo” com o protocolo TCP.
Estude a API para:
O cliente envia uma mensagem de texto ao servidor. Este devolve ao cliente a mesma String de volta.
O cliente deve mostrar a resposta, imprimindo a String recebida em stdout.
Para testar a aplicação, direcione o seu cliente para um servidor já em funcionamento na máquina alunos.di.uevora.pt (porto 8080)
$ java -classpath build/classes sd.EchoClient alunos.di.uevora.pt 8080 "uma mensagem que vai ao servidor"
# o resultado visível na consola deve ser:
Hi_[uma mensagem que vai ao servidor]_Bye
(o prefixo e sufixo foram inseridos pela aplicação servidor)
exercício ( servidor TCP )
Complete a aplicação servidor do serviço “echo”, com o protocolo TCP.
a) Estude a API para:
b) O servidor recebe o texto do cliente e devolve-lhe essa mesma String, eventualmente alterada com sufixo e prefixo, como indicado acima…
c) Coloque o servidor em funcionamento, validando a existência de um argumento com o porto em que escuta por ligações.
d) Teste o cliente anterior com esta nova aplicação… ajuste o argumento com o hostname onde o servidor está em execução e o porto que aceita ligações.
e) Teste o seu cliente com servidores implementados por colegas… acedendo ao respetivo endereço (apenas na sala ou se existisse conetividade para os portos que usamos!).
exercício Faça um pequeno ajuste no servidor:
exercício ( veículos 01 )
Considere um serviço de informação sobre veículos.
O servidor armazena dados sobre veículos na sede do IMTT. A aplicação cliente é executada em cada balcão regional daquele instituto, para obter informação sobre os veículos. Há dois tipos de pedido:
Videos de apoio
possível importação de um projeto NB para IntelliJ IDEA:
https://drive.google.com/file/d/1-WcCfvm9d0w3kv-uNz8ZXdmHMn2WO4l8/view
https://www.jetbrains.com/help/idea/netbeans.html#working-with-projects