A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.

Apresentações semelhantes


Apresentação em tema: "Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007."— Transcrição da apresentação:

1 Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007

2 Introdução A estrutura Socket foi uma inovação apresentada pelo sistema Berkeley Unix. Através desta estrutura, o programador por ler e gravar bytes como uma stream qualquer de dados. Além disto, esconde os detalhes de baixo nível das redes tais como tipo de transmissão, tamanho de pacote, retransmissão e etc.

3 Objetivos Estabelecer conexões entre máquinas Enviar e receber dados Encerrar conexões Esperar por conexões em determinada porta

4 As classes Os sockets estão localizados no pacote java.net. Basicamente precisamos das classes Socket e ServerSocket para conseguir implementar uma aplicação básica A classe Socket implementa o socket cliente. Para construir um socket precisamos saber qual é o IP que desejamos conectar e a porta de conexão (que varia de 0 a 65535) A classe ServerSocket fornece a interface de rede necessária para que a aplicação possa funcionar como um servidor TCP Para criar um ServerSocket precisamos saber qual é a porta que será utilizada. Comumente utiliza-se portas acima de 1000 pois as inferiores são utilizadas pelo sistema operacional

5 Exemplo Para ilustrar o uso dos sockets, iremos construir uma aplicação bastante simples para comunicação de dois computadores. Um computador ficará aguardando alguma conexão e irá exibir em tela o que foi recebido.

6 Servidor Um servidor nada mais é que um programa que fica ouvindo uma das portas do computador

7 Servidor package net.stream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Servidor { public static void main(String[] args) { try { 1. ServerSocket serverSocket = new ServerSocket(4444); 2. Socket clientSocket = serverSocket.accept(); 3. BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 4. System.out.println(in.readLine()); } catch (Exception e) { e.printStackTrace(); }

8 Passo a passo 1.Abre a porta Se a mesma não estiver disponível, sua aplicação vai cair 2.Fica ouvindo a porta até que seja enviada alguma stream pelo cliente. Sua aplicação ficará parada nesse ponto até que o cliente envie os dados 3.Armazena em um buffer os dados que o cliente envia 4.Imprime a linha enviada pelo cliente

9 Cliente O cliente irá se conectar na porta aberta pelo servidor e enviará uma mensagem Para abrir um socket cliente, você pode usar esse código Socket MyClient; MyClient = new Socket("Machine name", PortNumber);

10 Cliente package net.stream; import java.io.PrintWriter; import java.net.Socket; public class Cliente { public static void main(String[] args) { try { 1. Socket echoSocket = new Socket("localhost", 4444); 2. PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true); 3. out.println("Oi"); } catch (Exception e) { e.printStackTrace(); }

11 Detalhes 1.Abre um socket com o servidor localhost na porta PrintWriter (lembra dela?) abre um canal de comunicação no outputStream do socket, ou seja, escreve no destino (localhost:4444). O primeiro parâmetro indica se tem flush. Como é true, o flush está ativado 3.Manda um Oi para o outro lado do socket

12 Um exemplo mais completo No exemplo anterior o cliente envia uma linha de texto para o servidor e a execução acaba Neste próximo exemplo temos um loop e a execução só acaba quando o cliente digita Bye.

13 Servidor package net.stream; import java.net.*; import java.io.*; public class KnockKnockServer { public static void main(String[] args) throws IOException { try { ServerSocket serverSocket = new ServerSocket(4444); Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Server: " + inputLine); if (inputLine.equals("Bye.")) { //Se alguem enviar um "Bye" o programa acaba break; } in.close(); clientSocket.close(); serverSocket.close(); } catch (Exception e) { e.printStackTrace(); }

14 Cliente package net.stream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class EchoClient { public static void main(String[] args) throws IOException { try { Socket echoSocket = new Socket("localhost", 4444); PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true); BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); String userInput = null; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); } out.close(); stdIn.close(); echoSocket.close(); } catch (Exception e) { e.printStackTrace(); }

15 Dúvidas?


Carregar ppt "Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007."

Apresentações semelhantes


Anúncios Google