Baixe o app para aproveitar ainda mais
Prévia do material em texto
Tema da aula 1. Conceitos e fundamentos da computações distribuídas 1.1 Caracterização 1.2 Definição de um sistema distribuído 1.3 Arquiteturas de sistemas 1.4 Processos 1.4.1 Threads 1.4.2 Virtualização 1.4.3 Clientes e Servidores 1.5 Modelos de comunicação 1.5.1 Modelo de troca de mensagens 1.5.2 Chamada de procedimento remoto (RPC) 1.5.3 Invocação de método remoto (RMI) Socket usando TCP/IP oO processo de comunicação é orientado a conexão; oProcesso: o O servidor escolhe uma determinada porta o O servidor fica aguardando conexões nessa porta o O cliente deve saber previamente qual é a máquina servidor e a porta o O cliente solicita a conexão com a máquina/porta Socket usando TCP/IP o Se nenhum problema acontecer então irá estabelecer a comunicação Socket usando TCP/IP oO comportamento do servidor é ficar em um loop aguardando novas conexões gerando sockets para atender as solicitações dos clientes Socket usando TCP/IP Sockets usando TCP/IP Socket usando TCP/IP Projeto 01 Socket usando TCP/IP oPara implementar a estrutura de cliente/servidor utilizando o Java, este existe uma biblioteca para trabalhar com essa estruturas. Portanto para usá-las basta importar para o projeto; oPrática 01 o Criar um projeto usando o NetBeans o Criar uma Classe e nomeá-la de Cliente o Criar uma Classe e nomeá-la de Servidor o Importar a classe java.net.* para a classe cliente e servidor; o Importar a classe java.io.* para a classe cliente e servidor; Socket usando TCP/IP Cliente - importar o java.io.* - importar o java.net.* - criar o método main Cliente - importar o java.io.* - importar o java.net.* - criar o método main Servidor - importar o java.io.* - importar o java.net.* - criar o método main Servidor - importar o java.io.* - importar o java.net.* - criar o método main Socket Saída Entrada Sincronização Implementação do cliente o Especificar qual máquina o cliente conectará em qual porta o Criar um canal para enviar os dados o Criar um canal para receber os dados o Funcionalidades do programa Socket s = new Socket("localhost",2000); DataInputStream entrada = new DataInputStream(s.getInputStream()); DataOutputStream saida = new DataOutputStream(s.getOutputStream()); Transparência Implementação do cliente o Funcionalidades do programa Sincronização for (int i = 0; i < 100000; i++){ saida.writeInt(i); System.out.println("Enviei: "+i); String en = entrada.readUTF(); System.out.println("Recebi: "+en); } Implementação do servidor o Especificar qual porta o servidor ficará escutando o Se aparecer alguma conexão deverá aceitar o Criar um canal para receber os dados o Criar um canal para enviar os dados ServerSocket s = new ServerSocket(2000); System.out.println("Esperando conexao..............."); Socket conexao = s.accept(); System.out.println("Conexao aceita, esperando dados..."); DataInputStream entrada = new DataInputStream(conexao.getInputStream()); DataOutputStream saida = new DataOutputStream(conexao.getOutputStream()); Implementação do servidor o Fica recebendo os dados enviados pelo cliente for (int i = 0; i < 100000; i++) { int linha = entrada.readInt(); System.out.println("entrei"); saida.writeUTF("recebi seu dado: " + linha); } Sincronização Problemas do servidor • O servidor aceita somente uma conexão por vez; • O servidor não gera um loop infinito; • Não temos dados dos clientes no servidor para gerar relatório Socket usando TCP/IP Projeto 02 Socket usando TCP/IP Cliente - importar o java.io.* - importar o java.net.* - criar o método main Cliente - importar o java.io.* - importar o java.net.* - criar o método main Servidor - importar o java.io.* - importar o java.net.* - criar o método main - dentro do main inserir linhas de relatório Servidor - importar o java.io.* - importar o java.net.* - criar o método main - dentro do main inserir linhas de relatório Socket Saída Entrada Sincronização Implementação do servidor o Adaptando o servidor InetAddress endereco_remoto; int porta_remota; ServerSocket s = new ServerSocket(2000); System.out.println("Esperando conexao......................."); Socket conexao = s.accept(); System.out.println("Conexao aceita, esperando envio de dados."); endereco_remoto = conexao.getInetAddress(); porta_remota = conexao.getPort(); System.out.println("Nome da maquina remota: " + endereco_remoto.getHostName()); System.out.println("IP da maquina remota: " + endereco_remoto.getHostAddress()); System.out.println("Porta maquina remota: " + porta_remota); Problemas do servidor • O servidor aceita somente uma conexão por vez; • O servidor não gera um loop infinito; • Não temos dados dos clientes no servidor para gerar relatório Socket usando TCP/IP Projeto 03 Socket usando TCP/IP Cliente - importar o java.io.* - importar o java.net.* - criar o método main Cliente - importar o java.io.* - importar o java.net.* - criar o método main Servidor - importar o java.io.* - importar o java.net.* - criar o método main - loop infinito Servidor - importar o java.io.* - importar o java.net.* - criar o método main - loop infinitoSocket Saída Entrada Servidor sempre em execução Implementação do cliente Socket conexao = new Socket("127.0.0.1", 2001); DataInputStream entrada = new DataInputStream( conexao.getInputStream()); DataOutputStream saida = new DataOutputStream( conexao.getOutputStream()); String linha; BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); while (true) { System.out.print("> "); linha = teclado.readLine(); saida.writeUTF(linha); linha = entrada.readUTF(); if (linha.equalsIgnoreCase("")) { System.out.println("Conexao encerrada!"); break; } System.out.println(linha); } Implementação do servidor ServerSocket s = new ServerSocket(2001); while (true) { System.out.print("Esperando conectar..."); Socket conexao = s.accept(); System.out.println(" Conectou!"); DataInputStream entrada = new DataInputStream (conexao.getInputStream()); DataOutputStream saida = new DataOutputStream (conexao.getOutputStream()); String linha = entrada.readLine(); while (linha != null && !(linha.trim().equals(""))) { saida.writeUTF(linha); linha = entrada.readUTF(); } saida.writeUTF(linha); conexao.close(); } Implementação do servidor ServerSocket s = new ServerSocket(2001); while (true) { System.out.print("Esperando conectar..."); Socket conexao = s.accept(); System.out.println(" Conectou!"); DataInputStream entrada = new DataInputStream (conexao.getInputStream()); DataOutputStream saida = new DataOutputStream (conexao.getOutputStream()); String linha = entrada.readLine(); while (linha != null && !(linha.trim().equals(""))) { saida.writeUTF(linha); linha = entrada.readUTF(); } saida.writeUTF(linha); conexao.close(); } Problemas do servidor • O servidor aceita somente uma conexão por vez; • O servidor não gera um loop infinito; • Não temos dados dos clientes no servidor para gerar relatório Exercício oExercício: Ping-Pong o Modifique cliente e servidor tal que o cliente envie uma mensagem passada na linha de comando ao servidor e fique esperando uma resposta, e tal que o servidor fique esperando uma mensagem e então solicite ao operador que digite uma resposta e a envie para o cliente. O loop continua até que o usuário digite SAIR, e a conexão seja encerrada. Fim da aula 02....
Compartilhar