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

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

Programação em Java Sockets Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.

Apresentações semelhantes


Apresentação em tema: "Programação em Java Sockets Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores."— Transcrição da apresentação:

1 Programação em Java Sockets Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores

2 Socket Um socket pode ser usado em ligações de redes de computadores para permitir comunicação bidirecional entre programas Modo orientado a conexão (TCP) java.net.Socket, java.net.ServerSocket Modo orientado a datagrama (UDP) java.net.DatagramPacket e java.net.DatagramSocket Multicast java.net.DatagramPacket e java.net.MulticastSocket

3 Modo orientado a conexão Funciona sobre o protocolo TCP Serviços confiáveis: Sem perdas de dados na rede Garantia de ordem dos pacotes Desvantagens: É mais lento que o modo orientado a datagrama Comportamento servidor diferente do comportamento cliente

4 Transporte Aplicação Modelo Porta Rede Processo TCP Transporte Aplicação

5 Sockets TCP Clientes e servidores são diferentes. Servidor usa a classe ServerSocket para “escutar” uma porta de rede da máquina a espera de requisições de conexão (porta, tamanho máximo da fila) Clientes utilizam a classe Socket para requisitar conexão a um servidor específico e então transmitir dados (endereço, porta) ServerSocket server = new ServerSocket(12345,5); Socket conexao = new Socket(“213.13.45.2”,12345);

6 Servidor TCP 1) criar um socket que associe o processo a uma porta do host porta: número da porta que o socket deve esperar requisições; n: tamanho máximo da fila de pedidos de conexão que o sistema pode manter para este socket. O backlog permite que requisições sejam enfileiradas (em estado de espera) enquanto o servidor está ocupado executando outras tarefas. Se uma requisição de conexão chegar ao socket quando esta fila estiver cheia, a conexão é negada. ServerSocket server = new ServerSocket(porta, n);

7 Servidor TCP 2)Aceitar um pedido de conexão O método accept fica bloqueado até que um cliente requeira uma requisição para este socket (endereço: host e porta). 3)Streams de comunicação Stream de Leitura: InputStream in = conexao.getInputStream(); Stream de Escrita: OutputStream out = conexao.getOutputStream(); Socket conexao = s.accept();

8 Servidor TCP Encerramento da conexão. Com um cliente em específico: Do socket servidor (terminando a associação com a porta do servidor): Outras observações: Classe InetAddress : representa um endereço IP Para saber com quem esta conectado: socket.getInetAddress() e socket.getPort() conexao.close(); server.close();

9 Código Servidor ServerSocket server = new ServerSocket(porta,n); while (true) { Socket socket = serverSocket.accept(); //obtém o stream de entrada DataInputStream entrada = new DataInputStream(socket.getInputStream()); //obtém o stream de saída DataOutputStream saida = new DataOutputStream(socket.getOutputStream()); //eco: recebe mensagem e devolve para o cliente String data = entrada.readUTF(); saida.writeUTF(data); //fecha a conexao socket.close(); } serverSocket.close();

10 Cliente TCP 1) Criar um socket especificando o endereço e a porta do serviço a ser acessado: host é endereço ou nome do servidor e porta é o número da porta em que o servidor espera respostas. 2) Obter os streams de entrada e saida Idem servidor 3) Fechamento da conexão Idem servidor Socket socket = new Socket(host,porta);

11 Código Cliente Socket conexao = new Socket(endereco_servidor,porta); //obtém o stream de saída DataOutputStream saida = new DataOutputStream(socket.getOutputStream()); //obtém o stream de entrada DataInputStream entrada = new DataInputStream(socket.getInputStream()); //envia uma mensagem e espera resposta. saida.writeUTF(pergunta); String resposta = entrada.readUTF(); //fecha a conexao conexao.close();

12 Modo orientado a datagrama Funciona sobre o protocolo UDP Serviços não confiáveis: Mensagens podem ser perdidas Ordem das mensagens não garantida Vantagem: É muito mais rápido que o modo orientado a conexão

13 Socket UDP A comunicação UDP é feita através de duas classes: DatagramSocket: diferentemente do TCP, a mesma classe é utilizada na representação de sockets UDP tanto nos clientes quanto nos servidores. Socket cliente: DatagramSocket socket = new DatagramSocket(); Socket servidor: DatagramSocket socket = new DatagramSocket(porta); DatagramPacket: as comunicações ocorrem através da troca de datagramas. Esta classe contém os dados a serem enviados/sendo recebidos bem como o endereço de destino/origem do datagrama.

14

15 Código Servidor UDP DatagramSocket socket = new DatagramSocket(port); while (true) { //recebimento dos dados em um buffer de 1024 bytes DatagramPacket dg1 = new DatagramPacket( new byte[1024],1024); socket.receive(dg1); //recepção //envio de dados para o emissor do datagrama recebido DatagramPacket dg2 = new DatagramPacket( dg1.getData(),dg1.getData().length, dg1.getAddress(),dg1.getPort()); socket.send(dg2); //envio } socket.close();

16 Cliente UDP 1) cliente deve criar um socket Opcional: o cliente pode conectar o socket a um servidor específico socket.connect(host,porta); Parâmetros: host é endereço ou nome do servidor e porta é o número da porta em que o servidor espera respostas. Executando o connect, o emissor não necessita mais definir endereço e porta destino para cada datagrama a ser enviado. 2) Recepção e o envio de datagramas Idem servidor DatagramSocket clientSocket = new DatagramSocket();

17 Código Cliente UDP InetAddress address = InetAddress.getByName(name); DatagramSocket conexao = new DatagramSocket(); //socket.connect(address,port); byte[] req =... //envio de dados para o emissor do datagrama recebido DatagramPacket dg1 = new DatagramPacket(req,0,req.length, address,port); //com conect usar as linhas abaixo //DatagramPacket dg1 = new // DatagramPacket(req,req.length,0); conexao.send(dg1); //envio //recebimento dos dados em um buffer de 1024 bytes DatagramPacket dg2 = new DatagramPacket( new byte[1024],1024); conexao.receive(dg2); //recepcao byte[] resp = dg2.getData(); conexao.close();

18 Socket Multicast Modelo baseado em datagramas Não difere muito da programação UDP Principais diferenças: Uso da classe MulticastSocket (ao invés de DatagramSocket). MulticastSocket estende DatagramSocket Servidores interessados em receber mensagens de um grupo devem entrar nesse grupo

19 Grupos Multicast Cada grupo é identificado por um endereço IP classe D (224.0.0.0 a 239.255.255.255); Operações para gerenciamento de grupos: CreateGroup: Cria um grupo cujo único membro é o host criador; Executa quando um primeiro servidor se junta a um grupo. JoinGroup: Requisita a adição deste host a um grupo existente; MulticastSocket socket = new MulticastSocket(porta); socket.joinGroup(groupAddress); LeaveGroup: Pede a remoção do host invocador ao grupo especificado. socket.leaveGroup(groupAddress);

20 Servidor Multicast InetAddress groupAddress = InetAddress.getByName("226.1.1.1"); MulticastSocket socket = new MulticastSocket(port); socket.joinGroup(groupAddress); while (true) { //recebimento dos dados em um buffer de 1024 bytes DatagramPacket dg = new DatagramPacket( new byte[1024],1024); socket.receive(dg); //recepcao //imprime a mensagem recebida System.out.println("received "+ new String(dg.getData()).trim()); } socket.leaveGroup(groupAddress); socket.close();

21 Cliente Multicast String message =... InetAddress groupAddress = InetAddress.getByName("226.1.1.1"); MulticastSocket socket = new MulticastSocket(); byte[] data = message.getBytes(); //recebimento dos dados em um buffer de 1024 bytes DatagramPacket dg = new DatagramPacket( data,0,data.length,,groupAddress,port); socket.send(dg); //envio socket.close();


Carregar ppt "Programação em Java Sockets Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores."

Apresentações semelhantes


Anúncios Google