Buscar

Aula 04 - Sockets

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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....

Continue navegando