Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE PAULISTA - UNIP CIÊNCIA DA COMPUTAÇÃO APLICABILIDADE DA COMUNICAÇÃO NO SETOR AMBIENTAL Desenvolvimento de uma ferramenta para comunicação em rede SÃO PAULO – SP 2020 APLICABILIDADE DA COMUNICAÇÃO NO SETOR AMBIENTAL Desenvolvimento de uma ferramenta para comunicação em rede Trabalho semestral apresentado à Universidade Paulista como parte dos requisitos para aprovação de semestre do curso Bacharel em Ciência Da Computação. Orientador: Msc. Arthur Battaglia SÃO PAULO – SP 2020 Sumário 1. INTRODUÇÃO ...................................................................................................... 5 2. OBJETIVO ............................................................................................................ 9 3. REDES DE COMPUTADORES: O QUE É? ....................................................... 10 4. FUNDAMENTOS DA COMUNICAÇÃO DE DADOS EM REDE ......................... 13 4.1. Pilares da comunicação de dados ............................................................... 13 4.2. Componentes fundamentais ........................................................................ 13 4.3. Transmissões de dados ............................................................................... 14 4.3.1. Sentido das trocas de transmissões ......................................................... 14 4.3.2. Modo de transmissão ................................................................................ 14 4.4. Sincronização ............................................................................................... 15 4.5. Tipos de redes ............................................................................................. 16 4.5.1. Redes locais ............................................................................................. 17 4.5.2. Redes metropolitanas ............................................................................... 18 4.5.3. Redes geograficamente distribuídas ......................................................... 18 4.5.4. Redes sem fios ......................................................................................... 18 4.5.5. Inter-redes ................................................................................................. 19 4.6. Sockets de Berkeley..................................................................................... 19 5. O CONTROLE DE QUEIMADAS NO TERRITÓRIO AMAZÔNICO .................... 21 5.1. Metodologia de pesquisa utilizada ............................................................... 22 5.1.1. Resultados da metodologia de pesquisa utilizada .................................... 23 5.1.2. Como proceder? ....................................................................................... 28 6. O PROJETO ....................................................................................................... 29 6.1.1. O projeto ................................................................................................... 29 6.2. Classe cliente ............................................................................................... 30 6.2.1. Classe home ............................................................................................. 32 6.2.2. Classe login .............................................................................................. 34 6.2.3. Classe utils ................................................................................................ 37 6.2.4. Classe cliente listener ............................................................................... 38 6.2.5. Classe server ............................................................................................ 39 6.3. Como o programa deve ser .......................................................................... 41 6.4. Diagrama de caso de uso e o diagrama de classe da aplicação ................. 44 7. PLANO DE DESENVOLVIMENTO DO PROJETO ............................................. 45 7.1. Conceitos básicos: linguagem de programação Java .................................. 45 7.2. Interface gráfica da aplicação ...................................................................... 48 7.3. O chat ........................................................................................................... 58 7.4. Cliente .......................................................................................................... 61 7.5. Servidor ........................................................................................................ 63 7.6. Conceitos básicos: banco de dados ............................................................. 66 7.6.1. SQLite ....................................................................................................... 67 7.7. Caso de uso: o que cada usuário pode fazer na aplicação? ........................ 68 8. LINHAS DE CÓDIGO DO PROGRAMA ............................................................. 69 9. REFERÊNCIAS BIBLIOGRÁFICAS ................................................................... 76 5 1. INTRODUÇÃO No mundo contemporâneo, a comunicação tornou-se umas das necessidades fundamentais da sociedade humana desde o início de sua existência. A medida em que as civilizações se expandiam, ocupando locais cada vez mais longínquos geograficamente, a comunicação a distância tornava-se, consequentemente, uma grande necessidade. Alguns Modi operandi de comunicação de nossos antepassados, por exemplo, eram através de sinalização de fumaça, ou, a utilização de pombos-correios para tentar diminuir a distância entre as comunidades. Nós, seres humanos, sempre fomos ávidos por meios de comunicações mais instantâneas, ágeis. Seja através de um simples e-mail entre prestadores de serviço de uma mesma empresa ou até mesmo em um chat entre dois representantes de grandes indústrias distintas. À época, Samuel F. B. Morse, no ano de 1838, estabeleceu uma nova era em se tratando de comunicações, sendo o inventor do telégrafo. Os telégrafos iniciais utilizados no século XIX tinham suas mensagens encriptadas em cadeias de símbolos binários, conhecido como código Morse, e eram enviadas manualmente por meio de um operador através de um dispositivo que emitiam impulsos elétricos. A partir deste ponto, a comunicação por meio de impulsos elétricos passou por uma grande evolução, originando uma grande parte dos sistemas de comunicação que conhecemos atualmente, como, por exemplo, o rádio, a televisão e o telefone. Uma das ferramentas primárias para chat a ser documentada, foi a Internet Relay Chat (IRC). Desde então, melhorias foram sendo feitas em ferramentas de chat em tempo real, visando uma melhor performance em quesito velocidade e segurança. Em dias atuais, chats em tempo real se fazem presentes em escala mundial, desde ferramentas em computadores a aplicações em dispositivos mobiles. Diferente dos chats iniciais, por sua vez, esses entregam uma performance melhor em velocidade e possuem criptografia, priorizando a integridade de seus usuários. 6 O tratamento de informações, após evoluções, não ocorreu de forma isolada na área da comunicação. Ferramentas para processamento e armazenagem de dados tornaram-se também alvo de invenções ao passo em que nós fomos nos desenvolvendo. A inserção de sistemas computacionais no ano de 1950 foi, possivelmente, um dos grandes avanços do século neste quesito. A princípio, os computadores eram máquinas extremamente caras que concentravam em um só ponto o processamento das aplicações de inúmeros usuários e, grande parte das vezes, de uma organização inteira. Com a diminuição de custos do hardware e a inserção dos micros no âmbito da informática, aestrutura centralizada deu lugar a uma outra estrutura, na qual diferencia-se por ser amplamente distribuída, onde o aporte tecnológico de inúmeros portes variados processam dados de maneira isoladas, acarretando, consequentemente, alguns contratempos, como, por exemplo, a duplicação sem necessidade de recursos de hardware e de software. A sintetização dos computadores e das comunicações teve uma grande influência no modo como organizavam-se os sistemas computacionais. Encontra-se completamente em desuso, obsoleto, o conceito de um ‘centro computacional’, na qual os usuários levavam os programas a serem processados. O exemplo arcaico de um computador que atende todas as necessidades relacionadas à computação organizacional foi trocado por redes de computadores, onde realizam-se trabalhos por uma série de computadores interligados. Uma rede, é um grupo de, pelo menos, dois computadores que são interligados entre si, de modo que consiga haver comunicação uns com os outros compartilhando recursos e dados com maior agilidade e uma melhor logística. Uma rede, segundo (FOROUZAN, 2007), é um conjunto de dispositivos (normalmente conhecido como nós) conectados por links de comunicação. Um nó pode ser um computador, uma impressora ou outro dispositivo de envio e/ou recepção de dados, que estejam conectados a outros nós da rede. Uma rede computacional permite ao usuário realizar o compartilhamento de uma grande quantidade de dados e envio de mensagens uns aos outros, inclusive textos, imagens e vídeos. 7 Não dependendo do tamanho e do grau de sua complexidade, o objetivo de uma rede é assegurar que os recursos de dados a serem compartilhado, tenha um compartilhamento ágil, seguro e de maneira confiável. Para que isso ocorra, a rede em questão deve ter um aporte eficiente propiciando o ensejo, através de transmissões eficientes, normativas básicas (chamada de protocolos) e de mecanismos que sejam capazes de assegurar envio de informação entre os elementos que os compõem. Tendo como base o tempo de estudo e absorção dos conteúdos transmitidos em aulas, acreditamos que uma aplicação construída na linguagem de programação JAVA, pode, de maneira satisfatória, ajudar na elaboração de uma ferramenta para a comunicação em rede via chat e, juntamente utilizando-se das premissas dos Sockets de Berkeley, desenvolver uma ferramenta simples para a elaboração de um correio de voz. Através de pesquisas e análises, o vigente trabalho ambiciona descrever a metodologia de desenvolvimento de uma ferramenta de comunicação em rede, desde sua idealização até seu processo de finalização. Por fim, torna-se também um objetivo da ferramenta atender às necessidades do IPAM (INSTITUTO DE PESQUISA AMBIENTAL DA AMAZÔNIA), que tem interesse em ficar a par das atividades de queimadas, e, por consequência, o desmate por queimada e focos de incêndios, sendo ele criminoso ou não, a fim de combater casos que ocasionem poluição do ar nas adjacências do território amazônico, com ênfase nos municípios dos estados do Amazonas, Pará, Rondônia, Roraima e Mato Grosso. Para que haja acuracidade no repasse das informações, a equipe precisa trocar mensagens instantâneas com a central, que fiscaliza, via satélite, possíveis focos de incêndios e/ou desmate do solo que envolvam queimadas. O Instituto de Pesquisa Ambiental da Amazônia (IPAM) é uma organização científica, não governamental, apartidária e sem fins lucrativos que desde 1995 trabalha pelo desenvolvimento sustentável da Amazônia. O objetivo do IPAM é consolidar, até 2035, o modelo de desenvolvimento tropical da Amazônia, por meio da produção de conhecimento, implementação de iniciativas locais e 8 influência em políticas públicas, de forma a impactar o desenvolvimento econômico, a igualdade social e a preservação do meio ambiente. 9 2. OBJETIVO As Atividades Práticas Supervisionadas do 5º Semestre de 2020 do Curso de Ciência da Computação, tem por seu objetivo a pesquisa bibliográfica e a elaboração de uma ferramenta para uma aplicação de comunicação em rede. Para tal, a apresentação do desenvolvimento de uma aplicação desse nível contempla o uso da seguinte linguagem de programação JAVA juntamente com o auxílio do SQLite, em linguagem SQL, para que possa ser desenvolvido um local de armazenamento de informações. No intuito de satisfazer e cumprir o que foi proposto para o trabalho acadêmico semestral vigente, desenvolver um software baseado nas premissas dos sockets de Berkeley tornou-se nossa base para atingir o objetivo principal, que visa a criação de uma ferramenta de comunicação em rede via chat. Não menos importante, é, compreender os conceitos, a utilização e aplicação das redes de computadores, buscando os benefícios que o estudo da técnica selecionada proporciona. Visa-se, também, entender como o processo de desmatamento por queimadas no solo do território amazônico ocorre, com uma breve abordagem do assunto, tentando encontrar uma solução para um equilíbrio ambiental resultando na boa qualidade do ar, no bom funcionamento da fauna e da flora. 10 3. REDES DE COMPUTADORES: O QUE É? Denomina-se rede computadores um determinado grupo de sistemas de computação e alguns outros dispositivos de hardware, que, entre si, estão conectados por meio de canais de comunicação e compartilhamento de informações entre usuários, a fim de facilitar esse compartilhamento. Basicamente falando, toda vez que houver um conjunto de máquinas interligadas entre si, ali se estabelecerá uma rede. Tomando como exemplo, as iniciais redes de computadores foi a que existia no exército norte-americano, que funcionava como parte do sistema de radar. No ano de 1969, três universidades deram início a um projeto redes de computadores, sendo elas: Universidade da Califórnia, em Los Angeles, o Stanford research Institute, uma outra Universidade da Califórnia situada em Santa Barbara e, por último, a Universidade de Utah, localizada na cidade de Salt Lake. O projeto propiciou o aporte necessário para que houvesse conexão entre os três centros de ensino, que ficou conhecido como Projects Agency Network (ARPANET). Ao término da década, no ano de 1970, a Fundação Nacional de Ciência (ou NSF - National Science Foundation), tomou conhecimento que o projeto elaborado pela ARPANET teve um impacto relevante nas pesquisas acadêmicas nos U.S.A, permitindo, assim, que cientistas de todo o país fizessem compartilhamento de dados e trabalhassem juntamente em projetos voltados para pesquisa. Entretanto, para que fosse possível que uma universidade ingressasse no projeto da ARPANET, ela necessitava ter uma espécie de acordo de pesquisa com o Departamento de Defesa dos U.S.A, algo que muitas universidades não possuíam. Sendo assim, a NSF optou por patrocinar, em 1981, a Computer Science Network (CSNET), que passou a conectar os departamentos de Ciência da Computação e laboratórios de pesquisas industriais à ARPANET, por meio de linhas privadas. Ao término da década de 1980, a National Science Foundation alçou voos maiores decidindo elaborar uma "herdeira" para a ARPANET, que seria acessível a todos os grupos de pesquisas universitárias. No ano de 1972, Vint Cerf e Bob Kahn, ambos participantes do grupo principal da ARPANET, trabalharam juntos no projeto que eles denominaram 11 Internetting Project. Tal feito histórico de Cerf e Kahn, que fora registrado em num artigo no ano de 1973, descrevia, em protocolos, como era possível a entrega de pacotes de um ponto a outro. Este artigo, como atualmente conhecemos como Transmission Control Protocol (ou TCP) continha conceitos como encapsulamento, datagramas e funções de gateway. Após isso, as autoridades optaram compartilhar o TCP em dois protocolos, sendo eles: o TCPe o IP (Internetworking Protocol). O IP ficaria responsável por trazer o roteamento de datagramas, ao passo que o TCP ficara responsável pelas funções de mais altos níveis, sendo elas: segmentação, remontagem e detecção de erros. Sendo assim, a partir de então, o protocolo de interligação de redes teve passou a ser reconhecido como TCP/IP. No ano de 1980, novas redes, em específico as LANs, passaram a ser conectadas à ARPANET. Ao passo que a escala aumentou, tornava-se cada vez mais inviável monetariamente localizar os hosts, por isso foi elaborado o sistema de nomes de domínios, ou, DNS (Domain Name System), para que houvesse a organização de maquinas em domínios e que fosse possível relacionar os nomes de hosts com endereçamento de IP. Desde então, o Domain Name System se transformou em sistema generalizado de bancos de dados distribuídos, armazenando inúmeras informações referentes à nomes de endereçamento de IP. Em 1983, as autoridades decidiram abolir os protocolos originais da ARPANET, e o TCP/IP se tornou o protocolo oficial da ARANET. Ou seja, quem desejasse utilizar um computador para ter acesso à Internet em uma rede distinta tinha de estar utilizando o TCP/IP. Na década de 90, outros países e regiões conseguiram redes nacionais de pesquisa, geralmente moldadas conforme a ARPANET e a NSFNET. No continente Europeu, essas redes incluíram Europa NET e EBONE, que começaram com linhas de 2Mbps e posteriormente aumentaram a capacidade das linhas para 34Mbps. Mais tarde, a infraestrutura de rede no continente europeu foi entregue à indústria. No ano de 1990, a ARPANET foi oficialmente substituída e aposentada pela NSFNET. Em 1995, a NSFNET regressou ao seu conceito original de uma rede pesquisa. Em 1991, o governo dos U.S.A decidiu que a NSFNET não era competente o suficiente para suportar o tráfego da Internet que vinha aumentando 12 exponencialmente rápido. A partir daí a IBM, Merit e Verizon, preencheram este "buraco" ao formar uma organização sem fins lucrativos conhecidos como Advanced Network & Service, ou Serviços & Redes avançados, a fim de construir um novo backbone de Internet extremamente rápido chamado de Advanced Network Services Network (ASNET). Sendo assim, no ano de 1990 as pessoas testemunharam a explosão de aplicações de Internet devido ao surgimento da World Wide Web (ou WWW), que fora criada no CERN por Tim Berners-Lee e foi adicionada às aplicações comerciais desenvolvidas para a Internet. 13 4. FUNDAMENTOS DA COMUNICAÇÃO DE DADOS EM REDE A Comunicação de Dados encontra-se na área da Ciência da Computação, e trata das transferências de informações entre os sistemas de computadores e dispositivos distintos através de um meio transmissor. As transferências de informações implicam-se na passagem de estímulos (ou sinais) pelos meios físicos da intercomunicação que completam as redes (SANTOS, 2020). 4.1. Pilares da comunicação de dados Para que se estabeleça uma comunicação de dados, necessita-se manter as três bases fundamentais dela em perfeito estado e sintonia, sendo elas: Entrega: Apenas o dispositivo do usuário pode ter acesso e permissão no recebimento dos dados (SANTOS, 2020). Confiabilidade: Dados corrompidos não possuem de fato uma utilidade para o destinatário, logo, o sistema tem de assegurar que toda e qualquer informação que for enviada, tenha sua integridade “intacta” (SANTOS, 2020). Tempo de atraso: Em determinadas situações, o atraso é tolerado por um determinado tempo, em outras, deve-se evitar ao extremo o “delay” (tempo de resposta). Dados que são recebidos com demora não possuem uma utilidade específica, por exemplo, em chamadas de vídeo, onde a imagem necessita ser entregue, quase que instantaneamente, no momento em que foi produzida (SANTOS, 2020). 4.2. Componentes fundamentais Para lograr êxito em uma comunicação a ser realizada, o procedimento é composto por cinco (05) elementos básicos, sendo eles (SANTOS, 2020): Mensagem: Informação a ser recebida, desde números, textos, até arquivos de áudio e vídeo Transmissor (TX): Dispositivo emissor de dados. Por exemplo: computador, terminal de trabalho, telefone, etc (SANTOS, 2020). Receptor (RX): Dispositivo que atua como remetente do dado à ser entregue pelo Transmissor. Exemplo: terminal de trabalho, um telefone, uma câmera de vídeo Meio de transmissão: Caminho físico pelo qual passa a mensagem destinada ao Receptor (SANTOS, 2020). 14 Protocolo: Normativas que estabelece uma comunicação de dados entre dispositivos (SANTOS, 2020). 4.3. Transmissões de dados Para que uma transmissão ocorra numa via de comunicação mediante dois terminais, pode-se realizá-las de formas distintas, definindo-se por: simples, half- duplex e full – duplex (SANTOS, 2020). Meios de transmissões: Se trata da quantidade de bits transmitidos simultaneamente, sendo elas: paralela; serial (SANTOS, 2020). 4.3.1. Sentido das trocas de transmissões As transmissões entre dispositivos em redes dão-se em três maneiras distintas, que são elas: Simplex, Half-duplex ou Full-duplex. Simplex: Somente um único emissor e receptor. A intercomunicação possui uma via única, logo, de maneira exclusiva, um dos dispositivos terá a capacidade de emitir a informação, enquanto o outro apenas a receberá (SANTOS, 2020). Half-duplex: Cada estação poderá efetuar a transmissão, e, também, recebê-la, entretanto, jamais de maneira simultânea. Se, no caso, um dispositivo estiver efetuando uma transmissão, o outro necessariamente está recebendo. Na transmissão half-duplex, a prioridade é delegada sempre para quem está a transmitir os dados. Um exemplo claro disso seria a comunicação por um HT (Hand Talk), assim como o rádio Nextel (SANTOS, 2020). Full-duplex: Neste caso os dispositivos podem tanto emitir, quanto receber dados simultaneamente. Sinais em sentidos contrários dividem a capacidade do link ou canal, por exemplo, a comunicação por meio de um celular, onde temos a possibilidade de falar e ouvir, de maneira instantânea (SANTOS, 2020). 4.3.2. Modo de transmissão Indica a quantidade de bits que poderão ser transferidos por meio do canal de intercomunicação, simultaneamente (SANTOS, 2020). 15 Transmissão em modo Paralelo: Nas transmissões em modos paralelos, os bits que compõem o carácter são transmitidos simultaneamente, por meio de inúmeras vias de dados. Uma via pode ser um fio, um cabo ou qualquer outro meio de suporte físico. A ligação paralela dos computadores do tipo PC necessita, aproximadamente, de 10 fios (SANTOS, 2020). Transmissão em modo Série: Neste tipo de transmissão, os bits que compõem a informação são transmitidos um a um, por meio de uma única via de dados (SANTOS, 2020). 4.4. Sincronização Transmissão Assíncrona: Na transmissão Assíncrona, os dados são transmitidos um a um sem que haja um monitoramento de tempo entre ambos. Agora, pense que somente um bit é emitido durante um extenso momento de silêncio, no qual o receptor, em hipótese alguma, deve saber que trata-se de 00010000, ou 10000000. No intuito de amenizar esse contratempo, cada um dos dados são antecedidos de uma informação que remete à inicialização da transmissão (denominada bit START) encerrando-se com o envio de um aviso de fim de transmissão (denominada bit STOP). Comumente usada quando não se estabelece, no receptor, nenhum maquinismo de sincronização em relação ao emissor (SANTOS, 2020). Características: rendimento não alto; implementação não complexa; baixa velocidade Transmissão Síncrona: Informações que são enviadas de maneira agrupada e em determinadas lacunas de tempo. Dados de sincronismo são emitidos ao longo da transmissão, mantendo assim, a sincronicidade entre as máquinas. O RX (Receptor), incessantemente (mesmona ausência da transmissão de bit), recebe os dados à medida em que o emissor as envia. E, por isso, faz-se imprescindível que o TX (Transmissor) e RX encontrem-se em harmonia e na mesma velocidade. Além do mais, informações adicionais são introduzidas para assegurar a ausência de erros na transmissão (SANTOS, 2020). Características: Transmissão de boa qualidade; custo mais elevado de transmissão; equipamento mais sofisticado; ideal para envios de impulsos sensíveis a atraso; transmissão com maior credibilidade; adequado para aplicações multimidia; 16 4.5. Tipos de redes Não existe uma classificação ao certo para generalizar todas as redes de computadores, podendo, assim, classificá-las. Entretanto, duas técnicas de dimensões se sobrepõem às outras: tecnologia de transmissão e a escala No mundo contemporâneo, encontra-se dois tipos de tecnologias de transmissão sendo utilizadas, sendo elas: Links de difusão e Links ponto a ponto. Segundo (TANENBAUM, 2003) as redes de difusão têm apenas um canal de comunicação, compartilhadas por todas as máquinas da rede. Mensagens curtas, que em determinados contextos são chamados pacotes, enviadas por qualquer máquina, são recebidas por todas as outras. Um campo de endereço dentro do pacote especifica o destinatário pretendido. Quando recebe um pacote, uma máquina verifica o campo de endereço. Se o pacote se destinar à máquina receptora, ela o processará; se for destinado a alguma outra máquina, o pacote será simplesmente ignorado. Por outro lado, referente às redes ponto a ponto, Tanenbaum diz que estas, consistem em muitas conexões entre pares de máquinas individuais. Para ir da origem ao destino, um pacote nesse tipo de rede talvez tenha de visitar primeiro uma ou mais máquinas intermediárias. Como normalmente é possível haver várias rotas com diferentes tamanhos, encontrar boas rotas é algo importante em redes ponto a ponto. Como regra geral (embora existam muitas exceções), redes menores geograficamente localizadas tendem a usar difusão, enquanto redes maiores em geral são redes ponto a ponto (TANENBAUM, 2003) Uma maneira alternativa para classificar as redes é sua escala. A figura abaixo exibe uma classificação. Na parte superior, ficam as redes pessoais, que são as redes que se destinam a uma única pessoa, como, por exemplo, uma rede sem fios, conectando um desktop com o mouse, o teclado e impressora é uma rede pessoal. Além disso, um PDA que controla o aparelho de audição ou o marca-passo de um usuário se enquadra nessa categoria. Além das redes pessoais, encontramos redes de maior abrangência. Essas redes podem ser divididas em redes locais, metropolitanas e geograficamente distribuídas (ou remotas). Finalmente, a conexão de duas ou mais redes é chamada inter-rede. A Internet mundial é um exemplo bastante conhecido de inter-rede. A distância é importante como uma métrica de 17 classificação, porque são empregadas diferentes técnicas em escalas distintas (TANENBAUM, 2003). Figura 1 - Classificação de redes Fonte: http://www.vazzi.com.br/arquivos_moodle/Redes%20de%20Computadores%20-%20Tanenbaum.pdf 4.5.1. Redes locais Uma rede local, geralmente, é uma rede privada que acaba por conectar alguns hosts num único escritório, edifício, campus. A depender da necessidade da organização, a Local Area Network (LAN) pode simplesmente conter em sua rede apenas dois computadores e uma impressora no escritório da residência de alguém, ou, pode estender-se por toda uma empresa fazendo a inclusão de dispositivos de áudio/vídeo. Cada host presente em uma LAN tem seu próprio identificador, isso é, um endereço que define de forma única na LAN (TANENBAUM, 2003). http://www.vazzi.com.br/arquivos_moodle/Redes%20de%20Computadores%20-%20Tanenbaum.pdf 18 4.5.2. Redes metropolitanas Uma rede metropolitana (MAN), abrange uma cidade. O exemplo mais conhecido de uma MAN é a rede de televisão a cabo disponível em muitas cidades. Esse sistema cresceu a partir de antigos sistemas de antenas comunitárias usadas em áreas com fraca recepção do sinal de televisão pelo ar. Nesses primeiros sistemas, uma grande antena era colocada no alto de colina próxima e o sinal era então conduz ido até a casa dos assinantes (TANENBAUM, 2003). As redes MANs ofertam um competente meio de conexão entre redes LANs e WANs. A princípio, essas redes foram desenvolvidas para que houvesse a transmissão de dados, entretanto, atualmente, seus serviços sofreram uma expansão de amplitude (TANENBAUM, 2003). 4.5.3. Redes geograficamente distribuídas Segundo (referência), uma rede geograficamente distribuída, ou WAN (wide área network), abrange uma grande área geográfica, com frequência um país ou continente. Nela contém um conjunto de máquinas cuja finalidade é executar os programas do usuário (TANENBAUM, 2003). 4.5.4. Redes sem fios Em uma primeira aproximação, redes sem fios podem ser divididas em três principais categorias, sendo elas: interconexão de sistemas, LANs sem fios e WANs sem fios (TANENBAUM, 2003). Interconexão de sistemas: a interconexão de sistemas significa interconectar os componentes de um computador usando rádio de alcance limitado. LANs sem fios: são sistemas em que todo computador tem um modem de rádio e uma antena por meio dos quais pode se comunicar com outros sistemas. WANs sem fios: é usada em sistemas geograficamente distribuídos. 19 4.5.5. Inter-redes Dá-se uma inter-rede quando a mesma é formada por diferentes redes que estão sendo interconectadas. Existem muitas redes no mundo, com frequência apresentando diferentes tipos de hardware e software. É comum as pessoas estarem conectadas a redes diferentes e precisando se comunicar entre si. Para que isso seja possível, é necessário que se estabeleçam conexões entre redes quase sempre incompatíveis, às vezes por meio de máquinas chamadas de gateways, que estabelecem a conexão e fazem a conversão que precisa, tanto em termos de hardware quanto de software. Um conjunto de redes interconectadas é chamado de inter-rede ou internet. Esses termos serão usados em um sentido genérico, em contraste a internet mundial (uma inter-rede específica), que sempre será representada com inicial maiúscula (TANENBAUM, 2003). 4.6. Sockets de Berkeley Essa interface (socket) teve aparição no início do ano de 1980, na Universidade de Berkeley, como parte do ambiente UNIX de Berkeley, para o TCP. Suas primitivas, geralmente, são utilizadas em programação para a Internet, ofertando maiores recursos e sendo mais flexíveis. Suas primitivas, ou, ao menos, suas quatros primitivas na lista (figura abaixo) são executadas pelos servidores nessa exata ordem. A primitiva Socket cria um ponto final e aloca o espaço de tabela para ele na entidade de transporte. Os parâmetros da chamada especificam o formato de endereçamento a ser usado, o tipo de serviço desejado e o protocolo. Uma chamada Socket bem sucedida retorna um descritor de arquivo comum que será usado nas chamadas subsequentes, exatamente como uma chamada OPEN (TANENBAUM, 2003). 20 Figura 2 - Primitivas de sockets para TCP Fonte: http://www.vazzi.com.br/arquivos_moodle/Redes%20de%20Computadores%20-%20Tanenbaum.pdf O conceito de sockets permite-nos utilizar o conjunto de instruções que já foram projetadas em uma linguagem e programação para outros dispositivos de entrada e saída. Por exemplo, em grande maioria, nas linguagens de programação, têm inúmeras instruções para fazer a leitura e/ou a gravação d dados nos dispositivos de entrada e saída. Podemos utilizar as mesmas instruções para efetuar a leitura ou escrever em sockets, isto é, adicionar novas entidades de input/output à linguagem de programação sem que seja alterado a forma de enviar ou receber os dados.http://www.vazzi.com.br/arquivos_moodle/Redes%20de%20Computadores%20-%20Tanenbaum.pdf 21 5. O CONTROLE DE QUEIMADAS NO TERRITÓRIO AMAZÔNICO Pesquisadores do IPAM (INSTITUTO DE PESQUISA AMBIENTAL DA AMAZÔNIA), tiveram interesse em ficar a par das atividades de queimadas, e, por consequência, o desmate por queimada e focos de incêndios, sendo ele criminoso ou não, a fim de combater casos que ocasionem poluição do ar nas adjacências do território amazônico, com ênfase nos municípios dos estados do Amazonas, Pará, Rondônia, Roraima e Mato Grosso. A partir de então originou-se uma pesquisa para tentar reduzir ou combater as queimadas em território amazônico. Sabe-se que o fogo é um subterfugio químico no panorama rural brasileiro. Utilizado para efetuar a limpeza de espaços recém-desmatados e outros tipos de solo, como por exemplo, o pasto, que, com frequência, foge do controle e acaba queimando o que não deveria queimar. Com a Amazônia não ocorre diferente. Sua incidência na região está estritamente ligada à intervenção do homem e as chamas tendem a seguir o rastro do desmatamento: quanto maior o número de derrubada, maior será o número de focos de calor. O cenário agrava-se ainda mais em épocas de rígidas de estiagem. Secas mais severas, intensas e de longa duração diminuem a umidade no solo da flora amazônica, alastrando-se com extrema facilidade, elevando as possibilidades de grandes incêndios florestais. Em 2007 e 2010, por exemplo, quando a época seca, no Sul da Amazônia, foi mais severa que o habitual, largas áreas de florestas entraram em chamas ocasionando uma alta taxa de mortalidade de árvores. Em anos onde ocorreram uma taxa menor de desmatamento, como houve nos últimos anos, a intensidade da estação seca foi determinante para que houvesse casos de incêndio florestal. Nos últimos 20 anos, as secas severas na Amazônia foram-se tornando mais corriqueiras. Vinculadas à uma taxa crescente de desmatamento, elas (as secas) podem favorecer casos de incêndios florestais de proporções avassaladoras, com impactos negativos para a população, dentre elas o aumento exponencial de complicações de caráter respiratório, ameaça a plantios, infraestrutura e a diminuição da resiliência da floresta, que torna-se mais adepta a novos casos de queimadas e a danos causados por tempestades e patógenos. Por consequência, os impactos 22 econômicos provocado pelos incêndios florestais nos levam a números nada agradáveis. As queimadas do ano de 1998, por exemplo, resultou em um estrago financeiro que ultrapassam mais de US$ 5 bilhões. Da parte do Sistema Único de Saúde, o SUS, para tratar de complicações respiratórias do povo amazônida, foram destinado cerca de US$ 11 milhões. Com a baixa do desmatamento entre 2005 e 2012, as queimadas florestais, por consequência, também sofreram uma diminuição. Entretanto, a retomada do desmatamento em anos passados ocasionou a volta das chamas, impactando na vida da população campestre e urbana. No ano de 2019, a relação entre o desmate e fogo mostrou-se, particularmente, fora. Os habitantes das cidades na Amazônia, e até os de fora dela, passaram a consumir um ar mais “sujo”, mais poluído do que o encontrado em grandes cidades, como São Paulo. E isso pode ser extremamente desastroso à saúde. Foi a partir de então que o Instituto de Pesquisa Ambiental da Amazônia (IPAM) decidiu avaliar a dinâmica dos focos de calor (queimadas e incêndios florestais) que foram capturados via satélite em relação aos registrados em anos anteriores; buscando entender a ligação de incêndios com a rígida época de estiagem e com o desmatamento. 5.1. Metodologia de pesquisa utilizada Para que se possa ser feita uma avaliação da dinâmica e a ligação entre o desmatamento, focos de calor e a rígida época de estiagem, foi necessário utilizar 3 tipos de dados, sendo eles: focos de incêndio, número seguidos de dias sem chover e desmatamento em 2019. Para focos de incêndios, foram utilizados dados de um sistema de detecção de focos de calor do satélite AQUA (que é considerado um satélite referência pelo INPE) acumulados para o bioma Amazônia entre 01/01 e 14/08 de cada ano, de 2016 a 2019. A matemática usada para calcular a quantidade de números de dias sem chover foi feita com embasamento no Climate Hazards Group InfraRed with Stations (CHIRPS), que contém dados diários de chuva com resolução de 5 km. O maior número de dias seguidos sem chuva (onde houve menor 23 precipitação, abaixo de 1mm) foi calculado, levando em consideração, o período entre 01/01 e 14/08 de cada ano, de 2016 a 2019. Já para a análise do desmatamento foi utilizado dados do SAD (Sistema de Alerta de Desmatamento) acumulados entre janeiro e julho de 2019. Finalmente, então, foi relacionado o número de dias seguidos sem chover com os dados de focos de queimadas e incêndio e área desmatada, ta para os estados, quanto por municípios. 5.1.1. Resultados da metodologia de pesquisa utilizada A Amazônia vem sofrendo com mais queimadas no ano de 2019, e a época seca, somente ela, não elucida essa crescente (observar figuras 3 e 4). O número dos focos de incêndios para grande parte dos estados da região, já é o maior que houve dos quatros últimos anos. Este é um índice espantoso, porque a estiagem do ano de 2019 foi mais amena em comparação as dos anos anteriores (observar figura 4). Até 14/08, foram contabilizados 32.728 focos, cerca de 60% a mais à média dos 3 anos anteriores para a mesma época (média de 20,4 mil focos de incêndio, tendo variância entre 15 e 25,5 mil; (observar figura 4). A média de dias seguidos sem chover até 14 de agosto de 2019 teve variação de 11 dias no Amazonas e 29 dias no estado Roraima. Os casos de incêndio em grande número, no ano de estiagem mais tranquilas, aponta que o desmatamento possa ser um fator que impulsione às chamas, hipótese levada a teste aqui com resultado positivo: a ligação entre focos de incêndio e o desmatamento observado no início do ano até o mês 07 exibe-se de maneira bem acentuada. Forte (observar figura 3). Os 10 municípios amazônicos que mais concentraram registros de focos de incêndio foram, por sua vez, os que obtiveram taxas altas de desmatamento (figuras 3 e 6). Os municípios em questão são responsáveis por 37% de focos de calor no ano de 2019 e por 43% do desmate notado até o mês 07 (figura 6). Esse agrupamento de incêndios florestais nas áreas recém- desmatadas e com estiagem amena representa um contundente indicativo do caráter intencional dos incêndios: limpeza de áreas recém-desmatadas. 24 Nota-se que os registros de incêndios no ano de 2019 são claramente maiores nos estados do Acre, Amazonas, mato Grosso, Rondônia e Roraima, se comparadas aos incêndios dos quatros últimos anos. No Pará, o número de incêndios atual é de apenas 7% menor que o observado no ano de 2017, época em que a estiagem foi severamente crítica em relação ao ano de 2019 (figura 5). Figura 3 - Relação entre o número de focos de incêndios acumulados até 19 de agosto e área desmatada (esquerda) e número seguidos de dias sem chuva (direita) para municípios do bioma Amazônia em 2019. Os municípios identificados no gráfico são aqueles onde se registrou um número particularmente elevado de focos de incêndios. Fonte: IPAM 25 Figura 4 - Número médio de focos de incêndios cumulativo de dias sem chuva para o bioma Amazônia em 2019, comparado com a média de focos registrado para o período entre 2016 e 2018. Fonte: IPAM 26 Figura 5 - Número de focos de incêndios acumulados para o período de janeiro a 14 de agosto para os anos de 2016 a 2019 em seis estados amazônicos. As diferenças nas cores dentro do mesmo estado indicam o número cumulativo de dias com precipitação menor que 1 mm. Dados de Mato Grosso incluem somente informações paraa porção do bioma Amazônia. Fonte: IPAM. 27 Figura 6 - Os 10 municípios da Amazônia com maior número de focos de incêndio em 2019 e a área desmatada entre o período de janeiro a julho de 2019. Fonte: IPAM, com dados do INPE e SAD/Imazon No Acre, um fator que preocupa em relação aos incêndios e queimadas, é o comprometimento da boa qualidade do ar. Nas três últimas semanas, as cidades do Acre vêm passando deparando-se com muita poluição pela fumaça, com situação em estado grave nos municípios Assis Brasil, Sena Madureira, Manoel Urbano e Rio Branco. Em todos, os apontamentos de contração de material particulado estão deveras acima do que recomenda a OMS. O governo do Estado decretou situação de alerta referente às queimadas no dia 09, em agosto de 2019. No ano de 2019 foram contabilizados para o estado do Acre, até 14 de agosto, 1.790 focos de calor. Esses números representam um aumento de 57% a mais que o registrado em 2018 e 23% a mais que o registrado em 2016, ano onde a seca foi extrema, ocasionado pelo fenômeno El niño, um dos mais fortes dos últimos 10 anos. Vale lembrar que o registro dos focos de calor que foram usados como referência pelo INPE (dados do satélite AQUA) podem ser postos à dúvidas. Uma análise que foi realizada a partir de alertas de incêndios usando multissensores (imagens do satélite Sentinel, Landsat e Cbers) (figura 7) já somam mais de 19 mil hectares de queimadas no estado. 28 Figura 7 - Relação cartográfica entre registro de focos de calor do INPE (pontos em amarelo) e queimadas baseadas no satélite Sentinel (áreas em vermelho). Fonte: Universidade Federal do Acre. 5.1.2. Como proceder? Como uma das principais recomendações contra o desmatamento, é preciso que haja a intensificação de combate às derrubadas ilegais na floresta e apoio aos agricultores para que deixem de utilizar o fogo no preparo do solo. Promover a diminuição do fogo acarreta impactos positivos no bem-estar da população das cidades e do campo, resultando em menores gastos com saúde ou até mesmo com reposição de perdas agroflorestais. Torna-se imperioso a retomada as de campanhas de prevenção de queimadas, combate aos incêndios florestais e o uso de técnicas controladas do fogo. Deve-se estimular os proprietários rurais a aplicar técnicas de manuseio correto, por exemplo, uso de aceiros, a fim de evitar uma propagação por acidente das chamas. Sendo assim, cabe a ressalva de que o atual cenário, com número elevado de focos de incêndios no rastro do desmatamento, poderá se tornar “lugar comum” na Amazônia, onde, futuramente, a floresta acabe cedendo lugar para outros meios de utilizar a terra. Torna-se fundamental compreender o conceito de que, sem as largas extensões de florestas atuando como barreira contra a propagação do fogo, os danos futuros para a saúde das pessoas e da agricultura podem ser inestimáveis. 29 6. O PROJETO Para que haja acuracidade no repasse das informações, a equipe precisa trocar mensagens instantâneas com a central, que fiscaliza, via satélite, possíveis focos de incêndios e/ou desmate do solo que envolvam queimadas e afins. Para tal, admitiremos que os profissionais (treinandos e capacitados), em um ambiente interno, estejam apurando os dados que foram capturados e recebidos, via satélite, e estejam com a necessidade de repassar as informações de maneira instantânea e pragmática, a fim de compartilhar os resultados obtidos. Sendo assim, pensou-se na elaboração de um chat, contando com a arquitetura cliente-servidor, que estabelece conexão entre os usuários por meio de inserção de credenciais (nome e número de porta para conexão) e com o armazenamento de informações em um Banco de Dados. 6.1.1. O projeto Para a elaboração da arquitetura do projeto que foi idealizado, foram criadas as seguintes classes, sendo elas: classe Cliente, Home, Login, Utils, Listener e Server. Aqui, nesta etapa, serão demonstrados o passo a passo de como cada classe (com sua respectiva função) foi desenvolvida, e, ao final, o protótipo de como a aplicação deve ser. 30 6.2. Classe cliente Figura 8 - Além de ser responsável pela interação da interface gráfica com o usuário, ela tem a função de promover a conexão do cliente no servidor de mensagens e áudio. Basicamente ela é constituída pelos botões de envio (e captação) de áudio, mensagem; conta também com uma barra de rolagem (JScrollPane) para uma melhor visualização dos textos que vão sendo inseridos no campo de texto (JTextField). Figura 9 - Constitui-se pelo cabeçalho do chat onde será a pessoa com quem estarei conversando; contém um JEditorPane que irá exibir as mensagens e um JScrollPane onde há um painel de rolamento das mensagens; Mais abaixo há um JTextField, onde as mensagens serão introduzidas e um JButton que é responsável pela ação de enviar a mensagem contida no JtextField, que é o campo de texto; há também um outro JButton, que é responsável por fazer a gravação de áudio e enviar ao destinatário. 31 Figura 10 - Define-se, aqui, as dimensões das bordas do frame; a área destinada a inserção de mensagens não será editável; uma barra (JScrollPane.VERTICAL_SCROOLBAR_AS NEEDED) ficará posicionada verticalmente; a barra (JScrollPane.HORIZONTAL_SCROOLBAR_AS NEEDED) ficará posicionada horizontalmente, ambas com uma simples exibição. Sobre a questão “HORIZONTAL_SCROLLBAR_AS_NEEDED” significa que aparecerá a barra de rolagem apenas quando necessário. Figura 11 - O cabeçalho (JLabel_titulo, BorderLayout.NORTH) irá ficar posicionado ao norte; a barra de rolagem (rolar, BorderLayout.CENTER) ficará centralizada; o painel (painel, BorderLayout.SOUTH) irá ficar localizado ao sul da interface; o JT_mensagens, BorderLayout.CENTER ficará responsável por capturar toda a entrada de mensagens, pois, tudo que se encontra no centro ocupa todo o espaço; o botão de enviar mensagem (JB_mensagem, BorderLayout.EAST) ficará localizado à direita da interface; o botão responsável por enviar áudio (Jb_audio, BorderLayout.WEST) ficará localizado a oeste. O jd_mensagem.addActionListener(event -> enviar_mensagem()) é responsável pelo disparo de evento do envio de mensagem; acrescentar mensagens(String recebido) fica responsável por atualizar a área de mensagem quando enviarmos ou recebermos alguma mensagem. Figura 12 - Se o campo de mensagem conter alguma mensagem, logo assim que o usuário fizer o envio da mesma, ele será identificado como “Eu” (em negrito), seguido das informações de horas, minutos e segundos em que a mensagem foi enviada. Criei um método “main” para fins empíricos, apenas. Essa classe funcionaria com o método “start”, sem a necessidade do método principal. 32 6.2.1. Classe home Figura 13 - Inicialização das variáveis (jl_titulo; jb_capt_conectados; jb_start_talk; jl_usuarios; JScrollPane) promovendo a conexão das mesmas dando o aporte necessário para a conexão. Foi acrescentado um cabeçalho “Chat – Home” apenas para tornar o programa o mais intuitivo possível, a fim de fazer com que a experiência do usuário seja agradável. Figura 14 - O título conterá o nome do usuário e a porta em que ele se encontra através do jl_titulo; usuários conectados serão atribuídos a variável jb_capt_conectados, onde ocorrerá uma atualização da lista de contatos; através do jb_star_talk será possível abrir uma conversa; o JScrollPane permite-nos exibir a lista de usuários; define-se aqui também a dimensão do tamanho do cabeçalho, cor de fundo, e coloração da borda do cabeçalho. Todo o layout do programa foi inserido em um método “config_componentes”. 33 Figura 15 - O comando jb_capt_conectados.setFocusable (false) desabilita o foco do botão em questão, fazendo com que o mesmo não fique “focado” ao passar por ele; o botão de “Abrir conversa” (jb_start_talk) também foi implementado com omesmo comando (jb_start_talk.setFocusable (false)), para que o mesmo também não fique “focado” ao passar por ele. Apenas uma particularidade para tornar o programa mais “limpo”. O jl_usuarios_setSelectionMode(ListeSelectionModel.SINGLE_SELECTION) permite ao usuário escolher iniciar apenas uma conversa por vez; o usuário poderá verificar seus contatos online, através do comando jl_usuarios.setBorder(BorderFactory.createTitleBorder (“Usuários Online”) que fará o contorno da borda, entretanto, no canto superior esquerdo do cabeçalho irá aparecer “Usuários Online”; se caso necessário, uma barra de rolagem horizontal (rolar.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED)) e uma barra de rolagem vertical (rolar.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED)) irão ser exibidas para o usuário. Será de suma importância essas rolagens quando o nome do usuário for extenso e não couber na tela. Figura 16 - O método “inserc_acões” para caso ocorra um imprevisto, e perceba que estaria repetindo o código, portanto, é um “local seguro” para testes. O método “start” serve para aparecer a tela principal (Home), já o método “main” tem como objetivo testar suas funcionalidades e averiguar se está tudo de acordo. 34 6.2.2. Classe login Figura 17 - Construída através de um JFrame, a classe Login destina-se ao usuário. Ela é composta pelo botão auxiliar de “entrar” (Jb_login); seus JLabels, são: jl_usuario, onde o usuário insere sua identificação (ou apelido) a fim de que o outro usuário o identifique; jl_porta, onde é informado o numeral da porta que o usuário entrou; jt_usuario onde o texto de identificação inserido, identifica o nome ou apelido do usuário; jl_cabecalho serve para definir o design da tela de login; inseri também uma imagem para deixar com um visual mais agradável. No método “Login” inseri os demais métodos que servirão como o esqueleto do programa em si. 35 Figura 18 - São os métodos de auxílio de inicialização da classe: Jb_login, jl_usuario, jl_porta, jl_cabecalho, , jt_usuario e , jt_porta; pode-se definir aqui o tamanho da tela através da linha de comando this.setMinimunSize(new Dimension (400,300)); através do comando this.getContenPane().setBackGroung(Color.WHITE) pôde-se definir o parâmetro de cor de fundo, sendo ela branca; através do comando ImageIcon icone_imagem = new ImageIcon("../logo_chat.png) foi definido a imagem do cabeçalho; através do comando jl_cabecalho.setIcon(new ImageIcon(icone_imagem.getImage().getScaledInstance(375,100, Image.SCALE_SMOOTH))) foi definido o tamnho do ícone; através do comando jb_login.setBounds(10, 220, 375, 40) foram definidos a distância à esquerda, distância em reação ao topo, a altura e largura do botão "Iniciar"; através do comando jl_usuario.setBorder(BorderFactory.createLineBorder(color.gray)) foi definido a cor cinza. Figura 19 - Através do comando jl_porta.setBorder(BorderFactory.createLineBorder(color.gray)) foi definido o parâmetro de cor da borda, a qual é cinza; através do comando jt_usuario.setBounds(120, 120, 265, 40) foram definidos a distância à esquerda, distância em relação ao topo, a altura e largura do campo de texto onde será inserido o “apelido” (nome) do usuário; o comando jt_porta.setBounds(120, 170, 265, 40), assim como o comando anterior, tem a finalidade de definir o layout do campo de texto onde será inserido o número da porta em que o usuário se encontra. Criei um método “inserc_Componentes” que insere na tela do programa, todas as variáveis criadas: jb_login, jl_usuario, jl_porta, jl_cabecalho, jt_usuario, jt_porta. 36 Figura 20 - Seus botões de ações, como por exemplo, o botão de login (jb_login), irá atribuir a variável “apelido” ao campo de texto do usuário e a variável porta irá converter o campo string em inteiro; String apelido receberá jt_usuario.getText() onde apelido terá a variável usuário à ela; após a atribuição da variável “apelido” jt_usuario.setText(“ “) deixará em branco o textField; através do comando int porta = Integer.paseInte(jt_porta.getText()) a variável porta terá a variável jt_porta atribuída à mesma e como dito anteriormente, terá seu valor convertido para inteiro; o comando jt_porta.setText(“ “) fará com que fique em branco textField após ser atribuída à variável “porta”; Logo abaixo, o usuário insere algumas informações como, por exemplo, nome (apelido) e o numeral da porta; se tudo ocorrer bem, se a conexão através do socket for concretizada, uma mensagem de “SUCESSO” será exibida ao usuário e sendo assim, a tela principal onde se encontra pessoas online será aberta, caso contrário, serão exibidos JOptionPane’s, sendo, que, o primeiro JOptionPane irá informar se algum outro usuário já encontra-se usando o mesmo apelido ou host, e porta; o segundo JOptionPane irá informar um erro referente a não conexão, com a seguinte mensagem “Erro ao tentar conectar. Por favor, verifique se o servidor está em execução.”. Figura 21 - O método “start” foi criado para exibir a tela de login. O método “main” tem a finalidade de testar a tela de Login de forma individual e averiguar se possui algum erro de execução. 37 6.2.3. Classe utils Figura 22 - A leitura da mensagem que saiu é feita através do comando ObjectOutPutStream saída = new ObjectOutPutStram(conexão.getOutStream()); o comando saida.flush() força agravação dos arquivos que se encontrão no buffer; saída.writeObject(mensagem) escreve a mensagem; – Uma mensagem de [ERROR: enviarMensagem] será exibida caso a tentativa de envio da mensagem seja mal sucedida. Figura 23 - A mensagem recebida é lida através do comando ObjectInputStream entrada = new ObjectInputStream(connection.getInputStream()); será lido o que foi escrito no método “writeObeject’, na linha 13, através do comando resposta = (String) entrada.readObeject() e retornará o conteúdo que estiver na variável “resposta”. Será feito também um tratamento de erro, aparecerá o erro na tela informando em qual método ocorreu: receberMensagem() ou enviar_Mensagem(). 38 6.2.4. Classe cliente listener Figura 24 - inicialização de variáveis para que haja conexão, algo diferente disso será retornado um boolean informado o estado da conexão; o comando boolean running continua sendo executada mesmo com a paralização da thread (a classe cliente listener seria para fazer uma linha de gravação para com o usuário). O método “esta_executando”, como o nome já diz, informa o estado da execução: verdadeiro ou falso. O método “set_Running” inicializa o parâmetro “running” dentro do mesmo. Figura 25 - O retorno do boolean sendo verdadeiro (true), a execução será feita normalmente; enquanto ocorre a execução o servidor recebe mensagens; para encerrar a conexão basta o usuário inserir a mensagem “Quit”, que a conexão se encerrará. Figura 26 - O método “run” servirá para deixar em execução a classe ClienteListener. 39 6.2.5. Classe server Figura 27 - As linhas de código 12 e 13 indicam os numerais do host e a porta do servidor; inicia-se a variável “Clientes”; através de Socket conexão = servidor.accept() ocorre a conexão de uma outra pessoa. Criei um HashMap contendo como parâmetro o ClienteListener e variável “clientes”; Essa classe “Server” terá como finalidade, a conexão do usuário com o programa. Criei uma variável “conexão_info” com o tipo String, e em seguida inicializei a variável “clientes”. Criei uma variável “servidor” que aceitará a conexão, e um HashMap que fará uma varredura e armazenando os usuários dentro de um ArrayList. Criei um loop que enquanto o servidor estiver conectado, aceitará a conexão de outra pessoa, e poderá receber mensagens do usuário. Figura 28 - Caso a conexão seja bem sucedida, uma mensagem de “SUCESSO” será exibida, e caso contrário, a mensagem de “ERRO” será exibida;através do comando ClienteListener cl = new ClienteListener(conexão, this) será possível validar o login, e se isso ocorrer a classe ClienteListener será referenciada com as variáveis “conexão_info”, “conexão” e o server em que se encontra. Em seguida uma linha de gravação (thread) será inciada com o comando new Thread(cl).start(). Caso nada disso ocorra, uma mensagem de erro deve aparecer na tela. Figura 29 - Uma mensagem de [ERROR: Server] será exibida caso a tentativa de conexão com o servidor seja mal sucedida; o comando public MapcString. ClienteListener> getClientes() indica o método que assegura a conexão de todos os usuários. 40 Figura 30 - Aqui ocorre a checagem do login, através do comando private boolean checa_o_Login(string conexão_info); para separar a string usa-se o comando String[ ] splited = conexão_info.split( “:” ); através do comando for(Map .Entry<String. ClienteListener> pair: clientes.entrySet()) não permitirá que um usuário tenha o mesmo nome e/ou apelido e mesmo numeral de porta de rede; irá retornar valores “false” se o nome da chave for igual a variável “Splited”, e se host e porta forem iguais ao host e a porta “Splited”. Figura 31 - Caso haja sucesso na tentativa de login, será retornado “true”. O método “main” foi criado à fim de iniciar o servidor. 41 6.3. Como o programa deve ser Figura 32 – Tela de login com campos para as inserções das credenciais preenchidas pelo usuário, a fim de estabelecer conexão. Figura 33 – Tela “Chat – Home”, após a conexão do usuário na aplicação. 42 Figura 34 – Teste do usuário para envio de mensagem. 43 Figura 35 – Mensagem enviada após o teste feito pelo usuário. 44 6.4. Diagrama de caso de uso e o diagrama de classe da aplicação Figura 36 – Diagrama de caso de uso, ilustrando a função que cada componente exerce na aplicação. Figura 37 – Diagrama de classe, ilustrando a função das mesmas na aplicação. 45 7. PLANO DE DESENVOLVIMENTO DO PROJETO Para o desenvolvimento da aplicação do chat, constituído em linguagem Java, foi utilizado um MacBook Air (Mid 2009), da fabricante Apple, com processador Intel® Core™ 2 Duo 13 GHz, memória de 2GB 1067 MHz DDR3, de 120GB. Para auxiliar no desenvolvimento do chat, também foram usados os softwares Microsoft Word, SQLite e Microsoft Visual Studio. 7.1. Conceitos básicos: linguagem de programação Java A linguagem de programação Java é uma das linguagens mais difundida entre os programadores e entusiastas da tecnologia, e ganhou mais força ao decorrer das últimas duas décadas. Por isso, existem inúmeras razões pelas quais um aspirante à programador, ou, quem está pensando em desenvolver uma aplicação, deve adquirir conhecimentos a fim de aprender a programar em Java. Sua linguagem de programação foi desenvolvida na década de 90 por um grupo de programadores chefiada por James Gosling, na empresa Sun Microsystems. Diferente das outras linguagens, que são compiladas para código nativo, a linguagem de programação Java é compilada para bytecode, que é executado por uma VM (ou máquina virtual). Atualmente, a linguagem Java serve de base de quase todos os tipos de desenvolvimentos em rede e, definiu-se, por padrão, sua eficiência para desenvolvimento e implementações de aplicações mobiles, games, conteúdo on-line e softwares corporativos. Por sua fácil compreensão de sintaxe, mesmo que ainda em inglês, a linguagem em questão possui mínima quantidade de caracteres especiais, o que simplifica a leitura e compreensão da linguagem, tornado mais fácil a elaboração das linhas de código. Por ser orientada a objetos, as implementações tornam-se mais fácil, permitindo, assim, manter o sistema flexível. Absorvendo os conceitos básicos, como por exemplo, Abstração, Encapsulamento, Polimorfismo, Hereditariedade etc., a elaboração de uma aplicação se torna mais dinâmica. Uma aplicação desenvolvida na linguagem Java constitui-se de alguns itens, sendo eles: 46 POO – Programação Orientada a Objetos: Trata os elementos da linguagem de maneira similar aos objetos reais. Packages – Ao pé da letra, package, transliterado do inglês para o português, significa “pacote”. Assemelha-se ao conceito de biblioteca de funções, sendo que um pacote (packge) é um conjunto de classes, alocadas em um diretório com o nome do respectivo pacote. O pacote padrão, ou, package default é o java.lang.*; pacote esse que é adicionado a todo arquivo java mesmo que o seu criador não o faça referência. O .* (ponto e asterisco) informa ao Java para incluir todas as classes do pacote. Classes – São um conjunto de objetos com características comuns. A classe serve como modelo para a elaboração de objetos, que possuem as mesmas características da classe à qual é pertencente. Objetos – Os objetos são os elementos da classe. Por exemplo: temos uma classe “carros” que é formada pelos objetos denominados “carros”. Os objetos têm em comum o fato de serem carros (dispõem da mesma mecânica), entretanto, “carros” podem conter características diferentes entre si. Vale ressaltar que objetos possuem variáveis e métodos como também classes. Instância – O conceito de instância baseia-se em uma classe onde um novo objeto é criado dessa classe, ou seja, é criar um objeto do mesmo tipo da classe. Métodos – São os estados e ações dos objetos e classes, ou seja, são funções, sub-rotinas ou procedimentos. Variáveis – Representam as características do objeto. Superclasse – As classes são criadas tendo outra como alicerce. A classe que originou a outra é denominada superclasse, e a classe gerada chama-se de subclasse. Logo, toda classe tem uma subclasse. Construtores – Usa-se os construtores para realizar a inicialização dos objetos. Esse é método possui o mesmo nome de sua classe, onde não há qualquer tipo de retorno. Polimorfismo – Denomina-se polimorfismo a capacidade que o método tem de executar a ação apropriada a depender do tipo de objeto. 47 Threads – As threads tem por sua função a execução de seus fluxos em paralelo. Herança – Ocorre quando a subclasse herda as características da superclasse. Encapsulamento – Serve para “esconder” do usuário a implementação, ocultando-a. Feita a abordagem de algumas funcionalidades da linguagem a fim de esclarecê-la, exibir seus benefícios, dinamismo e robustez, vale ressaltar que o Java, atualmente, também possui um tempo acelerado de updates de versões. Estima-se que uma versão atualizada é lançada a cada 06 meses, ratificando o quão elevado é o seu aceleramento em relação a inovação e atualização da linguagem. 48 7.2. Interface gráfica da aplicação Para o desenvolvimento da aplicação do chat, constituído em linguagem Java, foi utilizado um MacBook Air (Mid 2009), da fabricante Apple, com processador Intel® Core™ 2 Duo 13 GHz, memória de 2GB 1067 MHz DDR3, de 120GB. Para auxiliar no desenvolvimento do chat, também foram usados os softwares Microsoft Word, SQLite e Microsoft Visual Studio. Com seu desenvolvimento gráfico voltado para uma utilização intuitiva, sua interface foi elaborada através do software Microsoft Visual Studio, proporcionando ao usuário uma fácil compreensão da utilização da aplicação. O ambiente direcionado ao login do usuário conta com os campos de inserção das credenciais “Apelido”, onde o mesmo irá introduzir seu nome para que haja identificação, conta com o campo “Porta”, onde deve ser informado o numeral da porta, pelo usuário, sendo requisito necessário que o usuário execute a fim de que uma conexão possa ser estabelecida. Por fim, após todos os passos, o botão “Entrar” deve ser acionado para que o uso da aplicação logre êxito. Logo abaixo, contém o protótipoda tela ilustrando sua interface, elaborada no Microsoft Visual Studio. Figura 38 - Protótipo da tela de Login elaborada no Microsoft Visual Studio. 49 Não permitindo o recurso de arrastar/soltar, a elaboração do protótipo de tela supracitado, no Microsoft Visual Studio, gerou linhas de códigos para que se atingisse o resultado do protótipo que foi exibido acima. Abaixo, as linhas do código da elaboração da tela de Login. Figura 39 - Código da elaboração da tela de Login. 50 Logo assim que o usuário fizer as inserções de suas credenciais, conseguindo estabelecer conexão, ele será redirecionado a uma outra tela, a tela Chat – Home. Essa tela, Chat - Home, conta com os botões de ações “Atualizar Contatos” e “Abrir Conversa”. A classe “Home” foi criada e, contida nela, se encontram suas respectivas variáveis a fim de que se possa ser feita suas inicializações. Suas variáveis são: jl_titulo, jb_capt_conectados, jb_start_talk, jl_usuarios e JScrollPane). O título irá conter o nome e a porta do usuário na qual ele se encontra, que será atribuída através da variável jl_titulo. Já aos usuários conectados, será atribuído a eles a variável jb_capt_conectados. Essa variável é responsável por dar um refresh na lista de contatos, fazendo com que ocorra uma atualização desta lista. Para iniciar uma conversa, foi criada uma variável jb_star_talk, que, através dela, será possível abrir uma conversa, e, com a variável JScrollPane nos é permitido a exibição da lista de usuários. Suas especificações de interface gráficas foram definidas através de definição de tamanho do cabeçalho, cor de fundo e coloração da borda do cabeçalho. Para uma fácil administração, todo o layout da aplicação foi inserido em um método, sendo esse: config_componentes. A fim de propiciar um layout limpo e de fácil compreensão, aos botões “Atualizar contatos” (jb_capt_conectados) e “Abrir Conversa” (jb_star_talk), foram ordenados os seguintes comandos: jb_capt_conectados.setFocusable (false) e (jb_start_talk.setFocusable (false)). Ambos os comandos fazem com que os botões não fiquem “focados” ao passar sobre eles. Uma outra ação que foi implementada, foi a de que, através do comando jl_usuarios_setSelectionMode(ListeSelectionModel.SINGLE_SELECTION), o usuário poderá somente abrir uma conversa por vez. Para a visualização dos usuários online na aplicação, foi implementado o comando jl_usuarios.setBorder(BorderFactory.createTitleBorder, onde irá aparecer “Usuários Online”. A posição desse título, “Usuários Online”, será no canto superior esquerdo, e ele fará parte do contorno da borda. Se houver necessidade, barras laterais e horizontais foram implementadas para que, se caso o conteúdo de alguma 51 mensagem for extenso, o usuário faça uso das barras de rolagens para ler a mensagem em questão. Foram criados dois métodos, sendo eles: “inserc_acoes” e “main”. O método inser_acoes é para caso ocorra algum imprevisto e perceber que estaria havendo a repetição de código. O método main tem como função testar suas funcionalidades e averiguar se tudo está de acordo na aplicação. Abaixo, o protótipo da tela Chat – Home e suas linhas de código. Figura 40 - Protótipo da tela "Chat - Home", após o usuário ter feito a inserções de suas credenciais. 52 Figura 41 - Linhas de código do protótipo da tela "Chat - Home". Figura 42 - Linhas de código do protótipo da tela "Chat - Home". 53 Figura 43 - Linhas de código do protótipo da tela "Chat - Home". Figura 44 - Linhas de código do protótipo da tela "Chat - Home". 54 Após selecionar um usuário on-line, em sua lista de usuários, para dar início a uma comunicação, a respectiva tela que deve ser apresentada ao usuário é a da conversa com quem o mesmo está interagindo. Essa tela ela é constituída pelos botões de “Áudio” e “Enviar”. Possui também uma barra de rolagem (JScrollPane), para uma melhor visualização dos textos que vão sendo inseridos no campo de texto (JTextField). Abaixo, a imagem mostra a tela da conversa com o usuário selecionado. Figura 45 - Protótipo da tela de conversa com o usuário selecionado. 55 Após o passo anterior, o usuário deve inserir o conteúdo de sua mensagem dentro do campo de texto, sendo atribuído a ele a variável JTextField. Abaixo, a imagem mostra o conteúdo da mensagem, inserida no campo destinado à ela. Figura 46 - Protótipo da tela de envio de mensagem ao usuário selecionado. 56 Feito isso, o passo seguinte que o usuário deve executar é o evento de enviar o conteúdo de sua mensagem para o contato selecionado, implementado através do comando jd_mensagem.addActionListener(event-> enviar_mensagem()) que é responsável pelo disparo da mensagem. Nesse quesito, foi adicionado um detalhe: logo após que o usuário fizer o envio da mensagem, algumas informações, como por exemplo, seu nome (identificado como “Eu”) e horas, irão aparecer em negrito. Abaixo, a imagem mostra o resultado do envio da mensagem juntamente com todas suas linhas de códigos que foram necessárias. Figura 47 - Protótipo de tela com mensagem enviada pelo usuário. 57 Figura 48 – Linhas de código do protótipo da tela de envio de mensagem ao usuário Figura 49 - Linhas de código do protótipo da tela de envio de mensagem ao usuário. 58 7.3. O chat Para o chat foi elaborado as seguintes especificações: pensou-se em um painel de rolamento de mensagens, que foi implementado através de um JScrollPane, e um local das exibições de mensagens, que pôde ser construído por meio de um JEditorPane. Além disso, foi idealizado também o local onde as mensagens a serem enviadas poderiam ser inseridas e, a forma mais simples e convencional, foi a elaboração de um campo de texto (JTextField). Visando identificar o outro usuário, que, por sua vez, é fundamental para que ocorra a comunicação, foi elaborado um espaço simples de identificação do mesmo. Optou-se que, no cabeçalho da janela de comunicação, seria a melhor opção para uma fácil e ágil identificação do usuário secundário que estivesse se comunicando em tempo real, através da aplicação. Há botões auxiliares, como por exemplo, o botão de “Áudio” e o botão “Enviar”, construídos através de um JButton. Figura 50 - Protótipo da tela de identificação de quem o usuário está a conversar. O usuário Victor, está no chat conversando com sua mãe. 59 Figura 51 – Linhas de código gerada do protótipo de tela acima. Para que seja uma aplicação cômoda, agradável e dinâmica ao usuário, foram introduzidas barras de rolamentos (lateral e horizontal) que serão ativadas somente quando houver a necessidade, em casos de textos extensos, possibilitando, assim, a fácil leitura do conteúdo. O envio da mensagem, então, tornou-se algo a ser mais bem detalhado referente à suas informações. Por isso, foram acrescidas não somente a identificação do usuário (com seu nome destacado em negrito) bem como a hora (minutos e segundos) em que a mensagem em questão fora enviada. Funcionará da seguinte maneira: se no campo de mensagem estiver contido qualquer conteúdo de texto, logo assim que o usuário fizer o envio da mesma, ele será identificado como “Eu” (em negrito), seguido das informações de horas, minutos e segundos em que a mensagem foi enviada. 60 Abaixo, segue o protótipo da elaboração citada contando com a linha de código para a formataçãodas informações de ênfase no nome do usuário, e de hora. Figura 52 - Protótipo de tela com ênfase no nome do usuário juntamente com a identificação da hora do envio da mensagem. 61 Figura 53 - Linhas de código com ênfase no nome do usuário e com horas de envio de mensagem. 7.4. Cliente A classe ClienteListener, tem como função estabelecer a conexão do cliente no servidor. Nela, ocorre a inicialização de variáveis para que seja possível a conexão. Um boolean foi inserido para que, se algo oposto disso ocorra, o estado da conexão será informado. Através da criação do método esta_executando, é possível saber, se, realmente está executando, informando o real estado dessa conexão, sendo ela: verdadeiro ou falso. Umm outro método também foi criado, que é o e do método run (que serve para deixar a classe CienteListener em execução). Caso o retorno do boolean seja verdadeiro, a execução ocorrerá sem quaisquer problemas e, enquanto ocorre a execução, o servidor recebe as mensagens. Se necessário, a fim de encerrar a execução, o usuário pode inserir a mensagem “Quit” que a conexão se dará por encerrada. Abaixo, seguem as linhas do código. 62 Figura 54 - Linhas de código da classe ClienteListener. Figura 55 - Linhas de código da classe ClienteListener. 63 Figura 56 - Linhas de código da classe ClienteListener. 7.5. Servidor A classe Server foi criada e projetada para servir como um modelo de servidor de mensagens e estabelecer a conexão do usuário com a aplicação. Para isso, é necessário que se indique os numerais de host e porta, do servidor. Nela, na classe Server, inicializa-se a variável Clientes, e através do socket de conexão conexão = servidor.accept(); é possível estabelecer a conexão de uma outra pessoa. Um HashMap foi criado, e nele contém o parâmetro CLienteListener e a variável Clientes. Uma outra variável, “conexão_info”, do tipo String, foi criada e em seguida uma outra variável, “servidor”, foi criada, também, para que haja a aceitação de conexão. Um HashMap ficará responsável por executar a varredura e armazenamentos dos usuários dentro de um ArrayList e um loop foi criado para que, enquanto o servidor estiver conectado, seja possível estabelecer a conexão de outra pessoa e receber mensagens do usuário. Caso a conexão logre êxito uma mensagem será exibida, e caso contrário, não havendo a conexão, será exibida da mesma forma uma mensagem informando que não foi possível estabelecê-la. Não sendo possível efetuar a validação de login através do comando ClienteListener cl = new ClienteListener(conexão, this), não ocorrendo a devida referência às variáveis “conexão_info” e “conexão” por meio da classe ClienteListener, no server que se encontra e nem iniciando o comando new Thread(cl).start(), uma mensagem de erro deve ser exibida. A mensagem de erro que deve ser exibida caso a tentativa de conexão com servidor não ocorra é [ERROR: Server]. Foi implementado um comando que assegura a conexão de todos os usuários, sendo ele: ClienteListener cl = new ClienteListener(conexão, this). Pensou-se também em um jeito onde a checagem do 64 login fosse feita, e através do comando “private boolean checa_o_Login(string conexão_info)” foi possível isso. Além disso, um comando de checagem de usuários foi inserido a fim de que os usuários não possuam o mesmo nome (ou apelido) e o mesmo número de porta de rede. Será retornado o valor “false” se caso o nome da chave for igual a variável Splited, e se o host e porta forem iguais ao host e a porta Splited. Havendo êxito no login, será retornado “tru”. O método main foi criado para que seja iniciado o servidor. Abaixo, as linhas de código. Figura 57 - Linhas de código usadas para o Servidor. Figura 58 - Linhas de código usadas para o Servidor. 65 Figura 59 - Linhas de código usadas para o Servidor. Figura 60 - Linhas de códigos usadas para o Servidor. Figura 61 - Linhas de código usadas para o Servidor. 66 7.6. Conceitos básicos: banco de dados Bancos de dados ou bases de dados são conjuntos de arquivos relacionados entre si com registros sobre pessoas, lugares ou até mesmo coisas. Como o nome sugestivo, um banco de dados é um local onde se pode armazenar dados de uma forma organizada, dando origem a conjuntos de arquivos. Um BD permite o agrupamento de informações que, depois, podem ser retiradas para outras funções. O elemento imperioso de um Banco de Dados é a tabela. Nela é possível fazer a relação entre tabelas que consiste num conjunto de dados dispostos em forma de linhas com conjuntos idênticos de propriedades, que são os registros. Um registro (ou tupla) é uma linha da tabela que representa todas as informações de uma entidade. Um campo é uma coluna da tabela, onde essa representa uma das informações do registro. 67 7.6.1. SQLite É uma biblioteca em linguagem C que implementa um banco de dados SQL embutido. A partir dele foi possível criar as seguintes tabelas: Login e Servidor. A tabela Login, é constituída por nome e senha. A tabela Servidor, é constituída por mensagem e nome Na tabela Login, os campos Nome e Senha não podem ficar em branco, tem de obrigatoriamente ser preenchidos. Devido a isso, suas especificações são dadas como NOT NULL e o campo Nome é sinalizado com uma chave, indicando ser uma chave primária. Abaixo, imagem da tabela Login Figura 62 - Tabela Login para armazenar o Nome e Senha do usuário. A tabela Servidor, é constituída pelos campos Mensagem e nome, sendo “Nome” identificada com uma chave estrangeira, relacionada com a tabela Login. Abaixo, imagem da tabela Servidor. Figura 63 - Tabela Servidor com os campos Mensagem e Nome. 68 7.7. Caso de uso: o que cada usuário pode fazer na aplicação? O servidor faz com que haja a conexão, estabelecendo-a. Os usuários podem efetuar login, atualizar contatos, acessar conversas e enviar mensagens. Abaixo, as imagens que ilustram o diagrama de caso de uso, e o diagrama de classe. Figura 64 - Digrama de caso de uso. Figura 65 - Diagrama de classes. 69 8. LINHAS DE CÓDIGO DO PROGRAMA 70 71 72 73 74 75 76 9. REFERÊNCIAS BIBLIOGRÁFICAS ALENCAR, A. IPAM Amazonia. ipam.org, 2019. Disponivel em: <https://ipam.org.br/wp-content/uploads/2019/08/NT-Fogo-Amazônia-2019.pdf>. Acesso em: 20 abr. 2020. FOROUZAN, B. A. Comucations and Networking. 5. ed. New York: The MacGraw Hill-Companies, Inc, v. 1, 2007. MOUTINHO, P. IPAM Amazonia. ipam.org, 2019. Disponivel em: <https://ipam.org.br/wp-content/uploads/2019/08/NT-Fogo-Amazônia-2019.pdf>. Acesso em: 20 abr. 2020. SANTOS, A. H. O. uniaogeek.com.br. União Geek, 17 mar. 2020. Disponivel em: <https://www.uniaogeek.com.br/redes-de-comunicacao-de-dados-principais- conceitos/>. SILVA, S. IPAM Amazonia. ipam.org, 2019. Disponivel em: <https://ipam.org.br/wp- content/uploads/2019/08/NT-Fogo-Amazônia-2019.pdf>. Acesso em: 20 abr. 2020. SILVÉRIO, D. IPAM Amazonia. ipam.org, 2019. Disponivel em: <https://ipam.org.br/wp-content/uploads/2019/08/NT-Fogo-Amazônia-2019.pdf>. Acesso em: 20 abr. 2020. TANENBAUM, A. S. Computer Networks. Amsterdam: Campus, 2003. Disponivel em: <http://www.vazzi.com.br/arquivos_moodle/Redes%20de%20Computadores%20- %20Tanenbaum.pdf>. 77
Compartilhar