Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouLuiz Casado Ferreira Alterado mais de 7 anos atrás
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.
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();
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.