Network Programming. Conceitos Básicos A classe InetAddress Programação de Socket TCP Programação de Socket UDP
|
|
|
- Francisco Brandt Padilha
- 9 Há anos
- Visualizações:
Transcrição
1 Network Programming Conceitos Básicos A classe InetAddress Programação de Socket TCP Programação de Socket UDP
2 Conceitos Básicos Internet e seus serviços TCP/IP IP UPD vs TCP
3 InetAddress Classe usada para manipular endereços IP Alguns métodos: public java.lang.string gethostname(); public java.lang.string gethostaddress(); public boolean equals(java.lang.object); public static InetAddress getbyaddress(string, byte[]) public static InetAddress getbyname(string) public java.lang.string tostring();
4 InetAddress Exemplo: Crie um programa onde o utilizador introduz um IP e o sistema retorna o domínio da máquina e vice versa.
5 import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; public class app1 extends JPanel implements ActionListener JLabel l1,l2; JTextField t1,t2,t3; JButton b1,b2,b3,b4; public app1() l1=new JLabel("IP"); l2=new JLabel("Dominio"); t1=new JTextField(10); t2=new JTextField(10); t3=new JTextField(10); b1=new JButton("Converter pra IP"); b2=new JButton("Converter pra Nome"); add(l1); add(t1); add(l2); add(t2); add(b1); add(b2); add(t3); b1.setbounds(100,100,20,10); b2.setbounds(90,100,100,10); b1.addactionlistener(this); b2.addactionlistener(this);
6 public static void main(string x[]) JFrame frm=new JFrame("Calculadora"); app1 obj=new app1(); frm.setcontentpane(obj); Container c=frm.getcontentpane(); c.setlayout(new FlowLayout()); frm.setvisible(true); frm.resize(400,500); public void actionperformed(actionevent e) if(e.getsource()==b2) try InetAddress addr=inetaddress.getbyname(t2.gettext()); String t=addr.gethostaddress(); t3.settext(t); if(e.getsource()==b1) try InetAddress addr2=inetaddress.getbyname(t1.gettext ()); String temp=addr2.gethostname(); t3.settext(temp); catch (Exception e5)system.out.print(e5.getmessage()); catch (Exception e4)system.out.print(e4.getmessage());
7 Programação de Socket TCP As seguintes classes e métodos são frequentemente usados: Socket Class getoutputstream() Cria um caminho para o envio de dados getinputstream() Cria um caminho para o receber dados ServerSocket Class Accept() - Aceitar conexões dos clientes (usado no servidor) Outros Métodos: Estas classes pertencem ao pacote: java.net.*
8 Outros Métodos ServerSocket: public java.net.inetaddress getinetaddress(); public int getlocalport(); public java.net.socketaddress getlocalsocketaddress(); public java.net.socket accept() throws java.io.ioexception; protected final void implaccept(java.net.socket) throws java.io.ioexception; public void close() throws java.io.ioexception; public java.nio.channels.serversocketchannel getchannel(); public boolean isbound(); public boolean isclosed();
9 Outros Métodos Socket: public boolean isconnected(); public boolean isbound(); public boolean isclosed(); public boolean isinputshutdown(); public boolean isoutputshutdown(); void setcreated(); void setbound(); void setconnected(); public java.net.inetaddress getinetaddress(); public java.net.inetaddress getlocaladdress(); public int getport(); public int getlocalport(); public java.net.socketaddress getremotesocketaddress(); public java.net.socketaddress getlocalsocketaddress(); public java.nio.channels.socketchannel getchannel();
10 Programação de Socket TCP As seguintes classes e métodos são frequentemente usados: DataOutputStreamClass writebytes(string) método para enviar dados usando o caminho outputstream criado. InputStreamReader Class readline() método para receber dados usando o caminho inputstream criado Estas classes pertencem ao pacote: java.net.*
11 Programação de Socket TCP Crie uma aplicação cliente-servidor, onde o cliente envia uma String para o servidor e este converte para maiusculos e re-envia para o cliente. Cliente import java.io.*; import java.net.*; import java.util.*; class client3 public static void main(string f[]) Scanner T=new Scanner(System.in); try Socket socket=new Socket(" ",9000); System.out.println("Digite a mensagem a enviar"); String antiga=t.nextline(); String nova; DataOutputStream out=new DataOutputStream(socket.getOutputStream()); BufferedReader indoserver=new BufferedReader(new InputStreamReader(socket.getInputStream())); out.writebytes(antiga+'\n'); nova=indoserver.readline(); System.out.println("Mensagem recebida do servidor="+nova); socket.close(); catch (Exception e5)system.out.print(e5.getmessage());
12 Server Programação de Socket TCP import java.io.*; import java.net.*; class server3 public static void main(string f[]) try ServerSocket sc=new ServerSocket(9000); String client; String toclient; while(true) Socket sock=sc.accept(); BufferedReader docliente=new BufferedReader(new InputStreamReader(sock.getInputStrea m())); DataOutputStream Do; Do=new DataOutputStream(sock.getOutputStream()); client =docliente.readline(); System.out.println("MENSAGEM DO CLIENTE:"+client); System.out.println("Convertendo pra maiuscula e enviando pa cliente:"); toclient=client.touppercase(); Do.writeBytes(toclient+'\n'); //sock.close(); catch (Exception e5)system.out.print(e5.getmessage());
13 Programação de Socket TCP Agora converta a aplicação cliente para GUI, mas o cliente deve especificar o IP do servidor e por defeito a porta 9000 é usada para a comunicação.
14 Programação de Socket TCP if(e.getsource()==b1) try InetAddress addr=inetaddress.getbyname(tip.gettext()); String t=addr.gethostaddress(); Socket socket=new Socket(t,9000); DataOutputStream out=new DataOutputStream(socket.getOutputStream()); out.writebytes(t1.gettext()+'\n'); BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); String mensagem=in.readline(); t2.settext(mensagem); catch (UnknownHostException e5)system.out.print(e5.getmessage()); catch (Exception e4)system.out.print(e4.getmessage());
15 Programação de Socket UDP Conexão não é ponto a ponto Não ha certeza se os dados chegaram ou não Não é necessàrio haver conexão para usar sockets UDP Ex. Classes: DatagramSocket: usado para criar um caminho para enviar pacótes DatagramPacket: contem o dado a ser enviado (pacótes)
16 Programação de Socket UDP Ex. Desenvolva uma aplicação onde o cliente enviam um ao servidor e este deve responder ao receber a mensagem.
Sockets e Threads em Java
Sockets e Threads em Java U N I V E R S I D A D E T E C N O L Ó G I C A F E D E R A L D O P A R A N Á D E P A R T A M E N T O A C A D Ê M I C O D E E L E T R Ô N I C A P R O F. V I T O R Y A N O Comunicação
User Datagram Protocol
User Datagram Protocol UDP: Protocolo utiliza para distinguir para qual usuário ou aplicativo deve ser encaminhado um datagrama destinado a uma máquina que esteja executando mais de um processo. Problemas:
Redes de Computadores II. Programação com Sockets em Python
v.2016 Redes de Computadores II Programação com Sockets em Python Prof. Ricardo Couto A. da Rocha [email protected] UFG Regional de Catalão Camada de Transporte Arquitetura TCP/IP APLICAÇÃO TRANSPORTE REDE
Resumo das Propriedades de UDP e de TCP
Relembrando... Processos duma aplicação distribuída comunicam via mensagens. O formato e o significado destas mensagens depende do protocolo usado. As mensagens são transportadas entre processos através
Programação Orientada por Objectos com Java. Ademar Aguiar. www.fe.up.pt/~aaguiar [email protected]. MRSC, Programação em Comunicações
Programação Orientada por Objectos com Java www.fe.up.pt/~aaguiar [email protected] 1 Java Networking java.net.* 141 Package java.net Java dispõe de diversas classes para manipular e processar informação
Programação Paralela e Distribuída. Prof. Cidcley T. de Souza
Programação Paralela e Distribuída Prof. Cidcley T. de Souza Conteúdo Parte I Introdução aos Sockets Tipos de Sockets Classes Java: InetAddress, Datagram Sockets, Stream Sockets, Output e Input Classes
Sockets em Java. Leonardo R. Nunes - [email protected]. 1. Introdução. 2. Sockets TCP/IP
Sockets em Java Leonardo R. Nunes - [email protected] 1. Introdução A comunicação entre processos de software tornou-se indispensável nos sistemas atuais. O mecanismo mais utilizado atualmente para
Utilização das classes Java para comunicação TCP/IP e UDP/IP
Utilização das classes Java para comunicação TCP/IP e UDP/IP Programação com Objetos Distribuídos (C. Geyer) Java Sockets 1 Autor Autores Local Cláudio Geyer Maurício Lima Pilla Instituto de Informática
PROGRAMAÇÃO COM SOCKETS
unidade I Tecnologias de Redes de Computadores PROGRAMAÇÃO COM SOCKETS Olá! Na aula de hoje, faremos um estudo sobre sockets. Esta aula fornecerá uma boa base de como sockets são utilizados para a transmissão
socket Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets
Programação de Sockets Mário Meireles Teixeira. UFMA-DEINF Programação de Sockets Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando s API de Sockets: introduzida no UNIX
Java 2 Standard Edition Fundamentos de
Java 2 Standard Edition Fundamentos de Helder da Rocha www.argonavis.com.br 1 Sobre este módulo Este módulo pretende apenas cobrir conceitos essenciais sobre programação em rede com Java Como criar um
Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP. Prof. Me. Sérgio Carlos Portari Júnior
Programando sistemas distribuídos com objetos distribuídos na rede TCP/IP Prof. Me. Sérgio Carlos Portari Júnior Conteúdo Programático Contextualizando: Aula anterior Camada Middleware Programar para SD
Programação de Sockets
Programação de Sockets Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets Socket API introduzida no BSD4.1 UNIX, 1981 explicitamente criados, usados e liberados
Programação com sockets (em Java)
com sockets (em Java) Prof. Dr. Julio Arakaki Depto. Ciência da 1 Comunicação entre processos // aplicações - é um dos mecanismos mais utilizados - Java oferece modos de utilização:. TCP ( Transmission
Mecanismos de Comunicação. Sockets em java (http://java.sun.com/docs/books/tutorial/networking/sockets/)
Mecanismos de Comunicação Sockets em java (http://java.sun.com/docs/books/tutorial/networking/sockets/) Sockets o que é? Um socket é um mecanismo de comunicação (dois sentidos) entre dois programas a funcionar
Redes de Computadores I
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Redes de Computadores I Desenvolvimento de Aplicações de Rede a partir da Biblioteca de
Caso 1 NetScanner Main
Caso 1 NetScanner import java.util.scanner; import java.net.unknownhostexception; import java.util.logging.level; import java.util.logging.logger; import javax.swing.joptionpane; public class Main { System.out.println("Digite
Exercício 1: Criar um programa que utiliza que desenha uma interface gráfica tal como descrito na Figura 1.1.
9ª LISTA DE EXERCÍCIOS INTERFACES GRÁFICAS DE USUÁRIO Disciplina: PC-II Exercício 1: Criar um programa que utiliza que desenha uma interface gráfica tal como descrito na Figura 1.1. Figura 1.1: Primeira
Programação com Sockets
ISUTIC 2017 Programação com Sockets Docente: MSc. Angel Alberto Vazquez Sánchez Bibliografía Deitel, H. M. & Deitel, H. Java: How to Program (Late Objects). (Pearson Education Limited, 2014), Chapter 27
Sistemas Distribuídos Java Sockets
Sistemas Distribuídos Java Sockets Departamento de Informática, UFMA Graduação em Ciência da Computação Francisco José da Silva e Silva 1 Introdução a Java Sockets Socket é o ponto final de um enlace de
Programação de sockets com TCP
Programação de sockets Objetivo: aprender a construir aplicações cliente-servidor que se comunicam usando sockets SOCKET = API (Application Program Interface) Introduzida no BSD4.1 UNIX, 1981 * Explicitamente
Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico
Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico Prof. Esp. André Aparecido da Silva Disponível em: http://www.oxnar.com.br/aulas/java/aulajava07a09.pptx Existe grande quantidade de funcionalidades
A classe JTextField
8.1.4. A classe JTextField É uma caixa para digitação do usuário que permite a inclusão de um texto de apenas uma única linha. Principais métodos setbounds(int x, int y, int Width, int Height) define as
Reader e Writer para streams de caracteres (texto).
Folha 1-1 Recordando POO: Streams Uma stream é uma abstracção que representa uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados que é definida independentemente do dispositivo
Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java
Guia da Sintaxe do Java TIPOS PRIMITIVOS DE DADOS DO JAVA São os tipos nativos de dados do Java, que podem ser usados na declaração de atributos, variáveis, parâmetros. Tipo primitivo Tamanho Valor padrão
Java : Comunicação Cliente-Servidor.
Java : Comunicação Cliente-Servidor. Objetivo: Capacitar o aluno a desenvolver uma aplicação servidora para múltiplos clientes. Apresentar as classes Socket e ServerSocket, classes de fluxo de dados, a
Comunicação entre processos
Comunicação entre processos Processo: um programa em execução num sistema terminal (host) Processos em sistemas distintos comunicam trocando mensagens Processo Cliente: processo que inicia a comunicação
INF1013 MODELAGEM DE SOFTWARE
INF1013 MODELAGEM DE SOFTWARE Departamento de Informática Ivan Mathias Filho [email protected] Programa Capítulo 18 Sockets OLadoServidor O Lado Cliente Múltiplos Clientes 1 Programa Capítulo 18 Sockets
Se você omitir :6789, o browser irá assumir a porta 80, que, provavelmente, não terá nenhum servidor à escuta.
Construindo um servidor Web multithreaded Neste laboratório, será desenvolvido um servidor Web em duas etapas. No final, você terá construído um servidor Web multithreaded, que será capaz de processar
Programação em Rede Baseada em Java. Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída www.dca.ufrn.
Programação em Rede Baseada em Java Luiz Affonso Guedes Tópicos em Redes de Computadores Programação Distribuída www.dca.ufrn.br/~affonso/cursos Definiçõs Básicas Uma rede é um conjunto de computadores
Java AWT Objectos e Eventos. Label Button TextField Checkbox RadioButton Combobox
Java AWT Objectos e Eventos Label Button TextField Checkbox RadioButton Combobox Label Construtores: Label() Label(String) Label(String, int) onde int=label.center/right/left Métodos setvisible(boolean)
Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira
Tratamento de Erros Sérgio Luiz Ruivace Cerqueira [email protected] Agenda Introdução Try, catch, finally Unchecked Exceptions Como levantar exceções Boas práticas O problema Calculadora numero1:
Redes de Computadores Programação com Sockets
Prof. Othon Batista ( [email protected] ) Página 1 Redes de Computadores Programação com Sockets Prof. Othon Batista ( [email protected] ) Página 2 Roteiro Introdução A Arquitetura TCP/IP O Protocolo IP
RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;
Fundação CECIERJ - Vice Presidência de Educação Superior a Distância Curso de Tecnologia em Sistemas de Computação Disciplina: Programação Orientada a Objetos AP2 2 semestre de 2016. Nome Assinatura Observações:
Passagem de Mensagens
Passagem de Mensagens Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.deinf.ufma.br 22 de novembro de 2011 Francisco Silva (UFMA/LSD)
Sistemas Distribuídos
Sistemas Distribuídos Aula 5 Msc. Daniele Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência da Computação UFU Bacharel em Ciência da Computação - UFJF Estrutura básica Uma aplicação
Programação Java. Construção de Interface gráfica. Processo Básico: OO + Eventos. Exemplo
Programação Java Construção de Interface gráfica Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Processo Básico: OO + Eventos Instanciar os componentes de interface por exemplo,
Programação de Sockets
Programação de Sockets Objetivo: aprender a construir aplicações cliente/servidor que se comunicam usando sockets API de Sockets introduzida no BSD4.1 UNIX, 1981 sockets são explicitamente criados, usados
Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Nona aula
Programação Orientada a Objetos II Java Nona aula 1 Programação Orientada a Objeto II Interface Gráfica AWT E SWING Criação de interfaces gráficas básicas Exercícios 2 Interface gráfica em Java As aplicações
1) Responda de acordo com os conceitos de orientação a objetos (0,5).
Avalição II (Teórica) 22/06/2017 Disciplina Linguagem de Programação II Prof. Wagner, dos Santos C. de Jesus Curso Engenharia da Computação Questões Solução da Avaliação 1) Responda de acordo com os conceitos
MÓDULO 4 SWING Parte 3
Aplicações de Linguagem de Programação Orientada a Objetos 2ºsem/2011 (Professores: Tiago e Daniele) // Exemplo11 Ação do Mouse import javax.swing.*; import java.awt.*; import java.awt.event.actionevent;
Um pouco do Java. Prof. Eduardo
Um pouco do Java Prof. Eduardo Introdução A tecnologia JAVA é composta pela linguagem de programação JAVA e pela plataforma de desenvolvimento JAVA. Os programas são escritos em arquivos-texto com a extensão.java.
PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1
Aula de Revisão para AV1 Conteúdo Programático desta aula Rever os principais conceitos apresentados Resolução de Exercícios para a prova Quantas bibliotecas de GUI existem em Java: a) Uma: Swing b) Duas:
Exemplo Threads com Swing:
Exemplo Threads com Swing: Fazer uma aplicação Java com 2 JLabel, com um ponto final, em formatação Negrito, tamanho 70 e um JButton. A aplicação deve conter 2 Threads e um método. O método deve fazer
Componentes GUI A aparência e maneira como um usuário pode interagir com componentes AWT diferem de acordo com a plataforma. Componentes Swing permite
Componentes GUI GUI Grafical User Interface São construídas a partir de componentes GUI chamados de controles ou widgets (windows gadgets engenhocas de janela). Ex: JOptionPane fornece caixas de diálogos
Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18
Elaborando Interfaces Prof. André Aparecido da Silva Disponível em: http://www.oxnar.com.br/2017/3ati Aulas 16, 17, e 18 1 Todos os componentes JLabel JTextField JButton Além do próprio JFrame2 Todos os
Programação com Sockets
Programação com LP4 Ciência da Computação 1 Comunicação entre processos Nível mais baixo É um tipo particular de modelo de programação em redes utilizado em várias linguagens como: C, C++ e Java São estruturas
Programação Orientada a Objetos SANTOS, Rafael (PLT)
Programação Orientada a Objetos SANTOS, Rafael (PLT) Possibilita atribuições em sequência na mesma instrução Retorna o valor atribuído Atribuições compostas: incluem a própria variável: +=, *=, -=, etc
Motivação. Java First-Tier: Aplicações. Entrada & Saída. Stream de Entrada. Stream de Saída. Pacote java.io. Leitura e Escrita de Streams
Java First-Tier: Aplicações Entrada & Saída Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Motivação Uma aplicação normalmente precisa obter e/ou enviar informações a fontes/destinos
Sockets com Java Parte I
Sockets com Java Parte I Neste artigo veremos como desenvolver aplicações em Java que podem comunicar-se via rede local ou via internet, usando sockets. Leia mais em: Sockets com Java Parte I http://www.devmedia.com.br/sockets-com-java-parte-i/
Capítulo II Modelos de Programação Distribuída
Capítulo II Modelos de Programação Distribuída From: Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 4, Addison-Wesley 2005 From: M. Ben-Ari Principles of Concurrent
Cliente-servidor com Sockets TCP
Cliente-servidor com Sockets TCP Paulo Sérgio Almeida Grupo de Sistemas Distribuídos Departamento de Informática Universidade do Minho 2007/2008 c 2000 2007 Paulo Sérgio Almeida Cliente-servidor com Sockets
Orientação a Objetos
Orientação a Objetos Socketsem Java ServerSocket/ Socket Gil Eduardo de Andrade Introdução Socketssão mecanismos de comunicação entre tarefas que permitem que aplicativos, em um mesma máquina ou em máquinas
Aula 30 - Sockets em Java
Aula 30 - Sockets em Java Sockets Sockets são estruturas que permitem que funções de software se interconectem. O conceito é o mesmo de um soquete (elétrico, telefônico, etc...), que serve para interconectar
JAVA. Professor: Bruno Toledo
JAVA Professor: Bruno Toledo Funcionamento de uma LP Em uma Linguagem de Programação (LP) como C e Pascal, temos o seguinte quadro quando vamos compilar um programa. Código fonte em c Teste.c Gera código
Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.
Folha 1-1 I/O em java (pakage java.io) A classe File A classe File (subclasse de Object) permite manipular os ficheiros e as directorias de um sistema de ficheiros. 1 - Substituindo o texto d:\\my_work\\
Vetores Unimensionais
Vetores Unimensionais Objetivos Entender a importância e a necessidade do uso de Vetores Definição de Manipulação de Vetores Inserir elementos em um vetor (usando laços ou não) Imprimir elementos de um
Sistemas Operacionais:
Sistemas Operacionais: Sistemas Distribuídos e Programação em Redes de Computadores Dierone Cesar Foltran Junior dcfoltran at yahoo.com Sistemas Distribuídos Sistemas Computacionais Distribuídos Lamport:
Reader e Writer para streams de caracteres (texto).
Folha 1-1 Recordando POO: Streams Uma stream é uma abstracção que representa uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados que é definida independentemente do dispositivo
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ SOCKETS UDP, TCP E MULTICAST. Prof. Cesar Augusto Tacla
PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ SOCKETS UDP, TCP E MULTICAST Prof. Cesar Augusto Tacla http://www.dainf.ct.utfpr.edu.br/~tacla Sumário 1. Introdução a. Contexto: comunicação inter-processos
package br.com.cadastro.visao;
package br.com.cadastro.visao; import java.awt.eventqueue; import java.awt.event.actionlistener; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.border.emptyborder; import br.com.cadastro.modelo.cliente;
Exercícios para o curso de Lógica e Programação Java
Exercícios de Java Exercícios para o curso de Lógica e Programação Java Desenvolvidos por Fernando Anselmo Versão 2.1 Este arquivo e de Distribuição Gratuita para todos os que desejam aprender a Linguagem
Implementando comunicação em JAVA via Sockets. Alcides Calsavara - [email protected] Leonardo R. Nunes - leonardo@sumersoft.
Implementando comunicação em JAVA via Sockets Alcides Calsavara - [email protected] Leonardo R. Nunes - [email protected] Sockets Utilizado para comunicação entre processos; Compreendendo Sockets
Interfaces Gráficas com Swing. Professor Leonardo Larback
Interfaces Gráficas com Swing Professor Leonardo Larback SWING Swing é um widget toolkit para uso em Java. Surgiu como sucessor do Abstract Window Toolkit (AWT) à partir do java 1.2. Como uma das principais
