Basisinformatie over netwerken en communicatieFlash Player 9 of hoger, Adobe AIR 1.0 of hoger Wanneer u toepassingen maakt in Flash Player of AIR, hebt u vaak toegang nodig tot resources buiten uw toepassing. U wilt bijvoorbeeld een aanvraag voor een afbeelding indienen bij een internetwebserver, zodat u de afbeeldingsgegevens ontvangt. Of u wilt misschien objecten met serienummering heen en weer sturen over een socketverbinding met een toepassingsserver. Met de API's van Flash Player en AIR beschikt u over verschillende klassen om uw toepassing te laten deelnemen aan deze gegevensuitwisseling. Deze API's bieden IP-netwerkondersteuning voor verschillende protocollen, zoals UDP, TCP, HTTP, RTMP en RTMFP. Met de volgende klassen kunt u gegevens over een netwerk verzenden en ontvangen:
Bij het maken van een webtoepassing is het vaak handig als permanente informatie over de status van de gebruikerstoepassing kan worden opgeslagen. HTML-pagina's en toepassingen gebruiken hiervoor cookies. In Flash Player kunt u hiervoor de SharedObject-klasse gebruiken. Zie Gezamenlijke objecten. (In AIR-toepassingen kunt u ook de SharedObject-klasse gebruiken, maar als u de gegevens opslaat naar een gewoon bestand zijn er minder beperkingen.) Wanneer uw Flash Player- of AIR-toepassing moet communiceren met een andere Flash Player- of AIR-toepassing op dezelfde computer, kunt u de LocalConnection-klasse gebruiken. Zo kunnen twee (of meer) SWF-bestanden op dezelfde webpagina met elkaar communiceren. Evenzo geldt dat een SWF-bestand dat op een webpagina wordt uitgevoerd, kan communiceren met een AIR-toepassing. Zie Communiceren met andere instanties van Flash Player en AIR. Wanneer u moet communiceren met andere, niet-SWF-processen op de lokale computer, kunt u de NativeProcess-klasse gebruiken, die is toegevoegd in AIR 2. Met de NativeProcess-klasse kan uw AIR-toepassing communiceren met andere toepassingen en ook dergelijke toepassingen starten. Zie Communiceren met native processen in AIR. Wanneer u informatie wilt ophalen over de netwerkomgeving van de computer waarop de AIR-toepassing wordt uitgevoerd, kunt u de volgende klassen gebruiken:
Belangrijke concepten en termenDe volgende referentielijst bevat belangrijke termen met betrekking tot het programmeren van netwerk- en communicatiecodes.
NetwerkinterfacesU kunt het object NetworkInfo gebruiken om te zien welke hardware- en softwarenetwerkinterfaces beschikbaar zijn voor uw toepassing. Het object NetworkInfo is een singleton-object. U hoeft dit object niet te maken. Gebruik in plaats hiervan de statische klasseneigenschap networkInfo om toegang te krijgen tot het enkele object NetworkInfo. Het object NetworkInfo verzendt eveneens een networkChange-gebeurtenis als er zich een wijziging voordoet in een van de beschikbare interfaces. Roep de methode findInterfaces() aan om een lijst met NetworkInterface-objecten te zien. Elk NetworkInterface-object in de lijst geeft een beschrijving van een van de beschikbare interfaces. Het NetworkInterface-object geeft informatie over onder meer het IP-adres, het hardwareadres en de maximale verzendeenheid. Ook wordt er aangegeven of de interface actief is of niet. In het volgende codevoorbeeld worden de NetworkInterface-eigenschappen van elke interface op de clientcomputer getraceerd: 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 ); } } } } } } Raadpleeg de volgende bronnen voor meer informatie: Wijzigingen in netwerkconnectiviteitUw AIR-toepassing kan worden uitgevoerd in omgevingen met een onzekere of veranderende netwerkconnectiviteit. Om de verbindingen met online bronnen beter te kunnen beheren, verstuurt Adobe AIR de gebeurtenis network change wanneer een netwerkverbinding beschikbaar of onbeschikbaar wordt. De gebeurtenis networkChange wordt verzonden door zowel het NetworkInfo-object als het NativeApplication-object van de toepassing. Om op deze gebeurtenis te kunnen reageren, voegt u een listener toe: NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); Vervolgens definieert u een gebeurtenishandlerfunctie: function onNetworkChange(event:Event) { //Check resource availability } De networkChange-gebeurtenis geeft geen wijziging in alle netwerkactiviteit aan, maar alleen dat er een netwerkverbinding is gewijzigd. AIR probeert niet om de betekenis van de netwerkwijziging te interpreteren. Een computer in een netwerk kan vele reële en virtuele verbindingen hebben. Het verlies van een verbinding betekent dus niet noodzakelijk dat een resource verloren is gegaan. Anderzijds waarborgen nieuwe verbindingen ook geen betere beschikbaarheid van de resources. Soms kan een nieuwe verbinding zelfs de toegang blokkeren tot resources die voordien beschikbaar waren (bijvoorbeeld wanneer verbinding wordt gemaakt met een VPN). Een toepassing kan alleen bepalen of deze verbinding kan maken met een externe resource door dit daadwerkelijk te proberen. Het framework voor servicebewaking biedt aan een opgegeven host een op gebeurtenissen gebaseerd middel om te reageren op wijzigingen in netwerkconnectiviteit. Opmerking: Het framework voor servicebewaking detecteert of een server op een aanvaardbare wijze reageert op een aanvraag. Een succesvolle controle garandeert geen volledige connectiviteit. Schaalbare webservices maken vaak gebruik van cachevoorzieningen en systemen om de belasting te verdelen, ten einde verkeer om te leiden naar een cluster van webservers. In deze situatie zorgen serviceproviders slechts voor een gedeeltelijke diagnose van de netwerkconnectiviteit.
ServicebewakingHet framework voor servicebewaking staat los van het AIR-framework en bevindt zich in het bestand aircore.swc. Om het AIR-framework te kunnen gebruiken, moet het bestand aircore.swc zijn opgenomen in uw ontwikkelingsproces. Adobe® Flash® Builder sluit deze bibliotheek automatisch in. De klasse ServiceMonitor implementeert het framework voor de bewaking van netwerkservices en levert de basisfunctionaliteit voor de servicebewaking. Een instantie van de klasse ServiceMonitor verstuurt standaard gebeurtenissen met betrekking tot de netwerkconnectiviteit. Het ServiceMonitor-object verzendt deze gebeurtenissen als een instantie wordt gemaakt en als er door de runtime een netwerkwijziging wordt vastgesteld. Bovendien kunt u de eigenschap pollInterval van een ServiceMonitor-instantie instellen om de connectiviteit in een bepaald interval (in milliseconden) te controleren, ongeacht algemene gebeurtenissen betreffende de netwerkconnectiviteit. Een ServiceMonitor-object controleert de netwerkconnectiviteit pas als de methode start() is opgeroepen. De klasse URLMonitor, een subklasse van de klasse ServiceMonitor, detecteert wijzigingen in de HTTP-connectiviteit voor een opgegeven URLRequest. De klasse SocketMonitor, eveneens een subklasse van de klasse ServiceMonitor, detecteert wijzigingen in de connectiviteit met een opgegeven host op een opgegeven poort. Opmerking: Vóór AIR 2 is het servicecontroleframework gepubliceerd in de bibliotheek servicemonitor.swc. Deze bibliotheek is nu verouderd. Gebruik in plaats hiervan de bibliotheek aircore.swc.
Flash CS4 en CS5 ProfessionalGa als volgt te werk om deze klassen te gebruiken Adobe® Flash® CS4 of CS5 Professional:
Flash CS3 ProfessionalAls u deze klassen in Adobe® Flash® CS3 Professional wilt gebruiken, moet u eerst de component ServiceMonitorShim vanuit het deelvenster Componenten naar de bibliotheek slepen. Voeg daarna de volgende import-instructie aan uw ActionScript 3.0-code toe: import air.net.*; HTTP-bewakingDe klasse URLMonitor bepaalt of HTTP-aanvragen kunnen worden ingediend via een bepaald adres op poort 80 (de typische poort voor HTTP-communicatie). De volgende code gebruikt een instantie van de klasse URLMonitor om connectiviteitswijzigingen in de Adobe-website te detecteren: 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); } SocketbewakingAIR-toepassingen kunnen ook socketverbindingen gebruiken voor push-model connectiviteit. Om veiligheidsredenen beperken firewalls en netwerkrouters doorgaans de netwerkcommunicatie via ongeoorloofde poorten. Daarom moeten ontwikkelaars er rekening mee houden dat gebruikers niet altijd socketverbindingen tot stand kunnen brengen. De volgende code gebruikt een instantie van de klasse SocketMonitor om connectiviteitswijzigingen in een socketverbinding te detecteren. De bewaakte poort is 6667, een veelgebruikte poort voor 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); } Als de socketserver een beveiligde verbinding vereist, kunt u de SecureSocketMonitor-klasse gebruiken in plaats van SocketMonitor. DNS-records (Domain Name System)U kunt DNS-bronrecords opzoeken aan de hand van de klasse DNSResolver. DNS-bronrecords bieden informatie zoals het IP-adres van een domeinnaam en de domeinnaam van een IP-adres. U kunt de volgende DNS-bronrecordtypen opzoeken:
Als u een record wilt opzoeken, geeft u een querytekenreeks en het klassenobject dat het recordtype representeert, door aan de methode lookup() van het DNSResolver-object. De te gebruiken querytekenreeks is afhankelijk van het recordtype:
In het volgende codevoorbeeld wordt het IP-adres van de host "example.com" opgezocht. 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 ); } } } Raadpleeg de volgende bronnen voor meer informatie: |
![]() |