12.07.2015 Views

Sockets em java

Sockets em java

Sockets em java

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Mecanismos de Comunicação<strong>Sockets</strong> <strong>em</strong> <strong>java</strong>(http://<strong>java</strong>.sun.com/docs/books/tutorial/networking/sockets/)


<strong>Sockets</strong> – o que é?●●Um socket é um mecanismo de comunicação(dois sentidos) entre dois programas afuncionar (normalmente) numa redeO pacote <strong>java</strong>.net contém duas classes –Socket e ServerSocket – que impl<strong>em</strong>entam,respectivamente, o cliente e o servidor numaligação


<strong>Sockets</strong> – o que é?●●Uma aplicação servidor é executada numadeterminada máquina e t<strong>em</strong> um socketligado a uma porta específica dessa máquinaO servidor espera que um cliente faça umpedido de ligação através desse socketServidor(escuta numa porta específica)Pedido deligaçãoCliente


<strong>Sockets</strong> – o que é?●●O servidor ao aceitar a ligação cria um novosocket para uma porta diferente (e assimpermite novas ligações)No lado do cliente um socket é criado e éusado para comunicar com o servidor (numaporta disponível na máquina cliente).Servidor(escuta numa porta específica)Ligação(por um outra porta)O cliente e o servidor pod<strong>em</strong> agora comunicarlendo e escrevendo nos seus sockets.Cliente(porta disponível)


<strong>Sockets</strong> – o que é?●●O pacote <strong>java</strong>.net contém a classe Socketque esconde todos os detalhes particulares acada sist<strong>em</strong>a.Ainda t<strong>em</strong> uma segunda classe,SocketServer, que impl<strong>em</strong>enta a parte deservidor.Servidor(escuta numa porta específica)Ligação(por um outra porta)Cliente(porta disponível)


<strong>Sockets</strong> – Ex<strong>em</strong>plo clienteimport <strong>java</strong>.io.*;import <strong>java</strong>.net.*;public class EchoClient {public static void main(String[] args) throws IOException {Socket echoSocket = null;PrintWriter out = null;BufferedReader in = null;try {echoSocket = new Socket("max.uma.pt", 7);out = new PrintWriter(echoSocket.getOutputStream(), true);in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));} catch (UnknownHostException e) {Syst<strong>em</strong>.err.println("Não encontro o host: Max.");Syst<strong>em</strong>.exit(1);} catch (IOException e) {Syst<strong>em</strong>.err.println("Não foi possível a ligação a: Max.");Syst<strong>em</strong>.exit(1);}BufferedReader stdIn = new BufferedReader(new InputStreamReader(Syst<strong>em</strong>.in));String userInput;while ((userInput = stdIn.readLine()) != null) {out.println(userInput);Syst<strong>em</strong>.out.println("echo: " + in.readLine());}out.close();in.close();stdIn.close();echoSocket.close();}}●Ligação à porta 7(Echo Server)●A negrito:– a definição dosocket e comopode ser lido eescritoPassos para o criar um cliente:1. Abrir um socket;– Ciclo while paraenviar e recebermensagens2. Criar os streams de leitura e escrita3. Ler e escrever mediante os objectivos do sist<strong>em</strong>a4. Fechar os streams.5. Fechar o socket.


<strong>Sockets</strong> – Ex<strong>em</strong>plo Servidorimport <strong>java</strong>.net.*;import <strong>java</strong>.io.*;public class KnockKnockServer {public static void main(String[] args) throws IOException {ServerSocket serverSocket = null;try {●Classe servidorserverSocket = new ServerSocket(4444);} catch (IOException e) {Syst<strong>em</strong>.err.println("Could not listen on port: 4444.");●Syst<strong>em</strong>.exit(1);}Socket clientSocket = null;try {clientSocket = serverSocket.accept();} catch (IOException e) {●Syst<strong>em</strong>.err.println("Accept failed.");Syst<strong>em</strong>.exit(1);}PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);}}BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String inputLine, outputLine;KnockKnockProtocol kkp = new KnockKnockProtocol();outputLine = kkp.processInput(null);out.println(outputLine);while ((inputLine = in.readLine()) != null) {outputLine = kkp.processInput(inputLine);out.println(outputLine);if (outputLine.equals("Bye."))break;}out.close();in.close();clientSocket.close();serverSocket.close();Espera o pedido deligação do clienteO resto és<strong>em</strong>elhante aocliente


<strong>Sockets</strong> – Exercício●Copie os ficheiros do ex<strong>em</strong>plo Knock KnockServer e adapte de forma que o clienteexecute na máquina do laboratório e oservidor no max.uma.ptNota: este servidor aceita múltiplas ligaçõesPágina:http://<strong>java</strong>.sun.com/docs/books/tutorial/networking/sockets/clientServer.html


<strong>Sockets</strong> – Stream VsDatagrama●Stream (TCP): existe uma ligação entrecliente e servidor (iniciada, mantida eterminada)– Vantag<strong>em</strong>: fiável– Desvantag<strong>em</strong>: velocidade●Datagrama (UDP): mensag<strong>em</strong> independentecuja entrega, t<strong>em</strong>po e conteúdo não sãogarantidos– Vantag<strong>em</strong>: rapidez– Desvantag<strong>em</strong>: não é fiável


<strong>Sockets</strong> – Datagrama●O Java t<strong>em</strong> as classes DatagramPackete DatagramSocket no pacote <strong>java</strong>.netque impl<strong>em</strong>enta a comunicação deDatagramas sobre o UDP.Para mais informação ver:http://<strong>java</strong>.sun.com/docs/books/tutorial/networking/datagrams/

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!