Noções básicas de rede e comunicaçãoFlash Player 9 e posterior, Adobe AIR 1.0 e posterior Ao criar aplicativos no Flash Player ou no AIR, você precisa frequentemente acessar recursos fora de seu aplicativo. Por exemplo, você pode enviar uma solicitação por uma imagem para um servidor web e receber os dados da imagem como retorno. Ou, você pode enviar objetos serializados de um lado para o outro sobre uma conexão socket com um servidor de aplicativos. As APIs do Flash Player e do AIR fornecem várias classes que permitem a seus aplicativos participação nesta troca. Estas APIs suportam rede com base em IP para protocolos como UDP,TCP, HTTP, RMTP e RTMFP. AS classes a seguir podem ser utilizadas para enviar e receber dados através de uma rede:
Frequentemente, na criação de aplicativos web é de grande ajuda armazenar informações persistentes sobre o estado do aplicativo do usuário. Páginas e aplicativos HTML geralmente utilizam cookies para este propósito. No Flash Player, você pode utilizar a classe ShareObject para o mesmo propósito. Consulte Objetos compartilhados. (A classe SharedObject pode ser utilizada em aplicativos AIR, mas existem menos restrições ao apenas salvar os dados em um arquivo normal). Quando o seu Flash Player ou aplicativo AIR precisa se comunicar com outro Flash Player ou outro aplicativo AIR no mesmo computador, você poderá utilizar a classe LocalConnection. Por exemplo, dois (ou mais) arquivos SWF na mesma página podem se comunicar. Da mesma forma, um arquivo SWF em uma página pode se comunicar com um aplicativo AIR. Consulte Comunicação com outras instâncias do Flash Player e AIR. Quando houver a necessidade de se comunicar com outros processos que não sejam SWF no computador local, você pode utilizar a classe NativeProcess adicionada no AIR 2. A classe NativeProcess permite ao seu aplicativo AIR lançar e se comunicar com outros aplicativos. Consulte Comunicação com processos nativos do AIR. Quando for necessário saber informações sobre o ambiente de rede do computador no qual um aplicativo AIR está sendo executado, pode-se utilizar as seguintes classes:
Conceitos e termos importantesA lista a seguir de referência contém termos importantes que você vai encontrar ao programar o código de sistemas de rede e comunicação:
Interfaces de redeVocê pode usar o objeto NetworkInfo para detectar as interfaces de rede de hardware e software à disposição do seu aplicativo. O objeto NetworkInfo é um objeto singleton, e você não precisa criá-lo. Em vez disso, use a propriedade estática de classe networkInfo para acessar o único objeto NetworkInfo. Além disso, o objeto NetworkInfo gera um evento networkChange quando uma das interfaces disponíveis mudar. Chame o método findInterfaces() para obter uma lista de objetos NetworkInterface. Cada objeto NetworkInterface da lista descreve uma das interfaces disponíveis. O objeto NetworkInterface fornece informações, tais como o endereço IP, endereço de hardware, unidade máxima de transmissão e se a interface está ativa. O exemplo de código a seguir rastreia as propriedades do NetworkInterface de cada interface no computador cliente: package { import flash.display.Sprite; import flash.net.InterfaceAddress; import flash.net.NetworkInfo; import flash.net.NetworkInterface; public class NetworkInformationExample extends Sprite { public function NetworkInformationExample() { var networkInfo:NetworkInfo = NetworkInfo.networkInfo; var interfaces:Vector.<NetworkInterface> = networkInfo.findInterfaces(); if( interfaces != null ) { trace( "Interface count: " + interfaces.length ); for each ( var interfaceObj:NetworkInterface in interfaces ) { trace( "\nname: " + interfaceObj.name ); trace( "display name: " + interfaceObj.displayName ); trace( "mtu: " + interfaceObj.mtu ); trace( "active?: " + interfaceObj.active ); trace( "parent interface: " + interfaceObj.parent ); trace( "hardware address: " + interfaceObj.hardwareAddress ); if( interfaceObj.subInterfaces != null ) { trace( "# subinterfaces: " + interfaceObj.subInterfaces.length ); } trace("# addresses: " + interfaceObj.addresses.length ); for each ( var address:InterfaceAddress in interfaceObj.addresses ) { trace( " type: " + address.ipVersion ); trace( " address: " + address.address ); trace( " broadcast: " + address.broadcast ); trace( " prefix length: " + address.prefixLength ); } } } } } } Para obter mais informações, consulte: Mudanças na conectividade de redeSeu aplicativo AIR pode ser executado em ambientes com conectividade de rede incerta e em mudança. Para ajudar um aplicativo a gerenciar conexões em recursos on-line, o Adobe AIR envia um evento de mudança de rede sempre que uma conexão de rede se torna disponível ou indisponível. O objeto NetworkInfo e o objeto NativeApplication do aplicativo geram o evento networkChange. Para reagir a esse evento, adicione um ouvinte: NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); E defina uma função do manipulador de eventos: function onNetworkChange(event:Event) { //Check resource availability } O evento networkChange não indica uma mudança em toda a atividade de rede, mas apenas que uma conexão de rede individual sofreu mudança. O AIR não tenta interpretar o significado da mudança de rede. Um computador em rede pode ter várias conexões reais e virtuais, portanto, perder uma conexão não significa necessariamente perder um recurso. Por outro lado, novas conexões também não garantem melhor disponibilidade de recursos. Às vezes uma nova conexão pode até bloquear o acesso a recursos anteriormente disponíveis (por exemplo, ao se conectar a uma VPN). Em geral, a única maneira de um aplicativo determinar se ele pode se conectar a um recurso remoto é por tentativa. A estrutura de monitoramento de serviço é um meio, com base em eventos, de reagir a mudanças na conectividade de rede de um host específico. Nota: A estrutura de monitoramento de serviço detecta se um servidor responde de maneira aceitável a uma solicitação. Uma verificação bem-sucedida não garante conectividade plena. Serviços dimensionáveis da Web geralmente usam aparatos de cache e balanceamento de carga para redirecionar o tráfego para um cluster de servidores Web. Nessa situação, provedores de serviço só oferecem um diagnóstico parcial de conectividade de rede.
Monitoramento de serviçosO framework do monitor de serviço, separado do framework do AIR, reside no arquivo aircore.swc. Para utilizar o framework, o arquivo aircore.swc deve ser incluído no processo de criação. O Adobe® Flash® Builder inclui essa biblioteca automaticamente. A classe ServiceMonitor implementa a estrutura para monitorar serviços de rede e oferece uma funcionalidade básica para monitores de serviço. Por padrão, uma ocorrência da classe ServiceMonitor despacha eventos relacionados à conectividade de rede. O objeto ServiceMonitor envia esses eventos quando a instância é criada e sempre que o tempo de execução detectar uma alteração na rede. Além disso, você pode definir a propriedade pollInterval de uma ocorrência ServiceMonitor para verificar a conectividade em um intervalo especificado em milissegundos, independentemente de eventos gerais de conectividade de rede. Um objeto ServiceMonitor não verifica a conectividade de rede até que o método start() seja chamado. A classe URLMonitor, uma subclasse da classe ServiceMonitor, detecta mudanças na conectividade HTTP para um URLRequest especificado. A classe SocketMonitor, também uma subclasse da classe ServiceMonitor, detecta mudanças na conectividade em um host especificado de uma porta especificada. Nota: Em versões anteriores ao AIR 2, o framework do monitor de serviço era publicado na biblioteca servicemonitor.swc. A utilização dessa biblioteca não é mais recomendada. Em vez disso, utilize a biblioteca aircore.swc.
Flash CS4 e CS5 ProfessionalExecute as etapas a seguir para utilizar essas classes no Adobe® Flash® CS4 ou CS5 Professional:
Flash CS3 ProfessionalPara usar essas classes no Adobe® Flash® CS3 Professional, arraste o componente ServiceMonitorShim do painel Componentes para a Biblioteca e, em seguida, adicione a seguinte declaração import ao código do ActionScript 3.0: import air.net.*; Monitoramento de HTTPA classe URLMonitor determina se podem ser feitas solicitações HTTP a um endereço especificado na porta 80 (a porta típica para comunicação HTTP). O código seguinte usa uma instância da classe URLMonitor para detectar mudanças de conectividade no site da Adobe: import air.net.URLMonitor; import flash.net.URLRequest; import flash.events.StatusEvent; var monitor:URLMonitor; monitor = new URLMonitor(new URLRequest('http://www.example.com')); monitor.addEventListener(StatusEvent.STATUS, announceStatus); monitor.start(); function announceStatus(e:StatusEvent):void { trace("Status change. Current status: " + monitor.available); } Monitoramento de soquetesAplicativos AIR também podem usar conexões de soquete para conectividade modelo empurrar. Firewalls e roteadores de rede geralmente restringem a comunicação em rede em portas não autorizadas, por questões de segurança. Por esse motivo, os desenvolvedores devem considerar que usuários podem nem sempre ter recursos para fazer conexões de soquete. O código seguinte usa uma instância da classe SocketMonitor para detectar mudanças de conectividade com uma conexão de soquete. A porta monitorada é a 6667, uma porta comum do IRC: import air.net.ServiceMonitor; import flash.events.StatusEvent; socketMonitor = new SocketMonitor('www.example.com',6667); socketMonitor.addEventListener(StatusEvent.STATUS, socketStatusChange); socketMonitor.start(); function announceStatus(e:StatusEvent):void { trace("Status change. Current status: " + socketMonitor.available); } Caso o servidor socket necessite um conexão segura, você pode utilizar a classe SecureSocketMonitor ao invés da SocketMonitor. Registro do Sistema de Nome de Domínios (DNS)Você pode consultar os registros do recurso de DNS através da classe DNSResolver. Os registros do recurso de DNS geram informações como o endereço IP de um nome de domínio e o nome de domínio de um endereço IP. Você pode consultar os seguintes tipos de registros do recurso de DNS:
Para consultar um registro, transmita uma sequência de caracteres de consulta e o objeto de classe que representa o tipo de registro ao método lookup() do objeto DNSResolver. A sequência de caracteres de consulta a ser usada depende do tipo de registro:
O seguinte exemplo de código consulta o endereço IP do host “example.com”. package { import flash.display.Sprite; import flash.events.DNSResolverEvent; import flash.events.ErrorEvent; import flash.net.dns.ARecord; import flash.net.dns.DNSResolver; public class DNSResolverExample extends Sprite { public function DNSResolverExample() { var resolver:DNSResolver = new DNSResolver(); resolver.addEventListener( DNSResolverEvent.LOOKUP, lookupComplete ); resolver.addEventListener( ErrorEvent.ERROR, lookupError ); resolver.lookup( "example.com.", ARecord ); } private function lookupComplete( event:DNSResolverEvent ):void { trace( "Query string: " + event.host ); trace( "Record count: " + event.resourceRecords.length ); for each( var record:* in event.resourceRecords ) { if( record is ARecord ) trace( record.address ); } } private function lookupError( error:ErrorEvent ):void { trace("Error: " + error.text ); } } } Para obter mais informações, consulte: |
![]() |