Grundlagen zu Netzwerken und KommunikationFlash Player 9 und höher, Adobe AIR 1.0 und höher Bei der Erstellung von Anwendungen in Flash Player oder AIR müssen Sie häufig auf Ressourcen zugreifen, die sich außerhalb der Anwendung befinden. Beispielsweise senden Sie eine Bildanforderung an einen Webserver im Internet und erhalten die Bilddaten als Rückgabe. Oder Sie senden serialisierte Objekte über eine Socketverbindung mit einem Anwendungsserver hin und zurück. Die APIs für Flash Player und AIR bieten mehrere Klassen, über die Ihre Anwendungen an diesem Informationsaustausch teilnehmen können. Diese APIs unterstützen IP-Netzwerke mit Protokollen wie UDP, TCP, HTTP, RTMP und RTMFP. Mit den folgenden Klassen können Daten über ein Netzwerk gesendet und empfangen werden:
Bei der Erstellung einer Webanwendung ist es häufig ratsam, persistente Informationen über den Anwendungsstatus des Benutzers zu speichern. HTML-Seiten und -Anwendungen verwenden dazu normalerweise Cookies. In Flash Player können Sie zu diesem Zweck auch die SharedObject-Klasse verwenden. Siehe Gemeinsame Objekte. (Die SharedObject-Klasse kann in AIR-Anwendungen verwendet werden, es gelten jedoch weniger Einschränkungen, wenn die Daten einfach in einer regulären Datei gespeichert werden.) Wenn Ihre Flash Player- oder AIR-Anwendung mit einer anderen Flash Player- oder AIR-Anwendung auf demselben Computer kommunizieren muss, können Sie die LocalConnection-Klasse verwenden. Beispielsweise können zwei (oder mehr) SWF-Dateien auf derselben Webseite miteinander kommunizieren. Genauso kann auch eine SWF-Datei, die in einer Webseite ausgeführt wird, mit einer AIR-Anwendung kommunizieren. Siehe Kommunikation mit anderen Flash Player- und AIR-Instanzen. Zur Kommunikation mit anderen Prozessen (nicht SWF) auf dem lokalen Computer können Sie die NativeProcess-Klasse verwenden, die ab AIR 2 zur Verfügung steht. Über die NativeProcess-Klasse können Ihre AIR-Anwendungen andere Anwendungen starten und mit ihnen kommunizieren. Siehe Kommunikation mit nativen Prozessen in AIR. Wenn Sie Informationen über die Netzwerkumgebung des Computers benötigen, auf dem eine AIR-Anwendung ausgeführt wird, können Sie die folgenden Klassen verwenden:
Wichtige Konzepte und BegriffeIn der folgenden Referenzliste sind wichtige Begriffe aufgeführt, die Ihnen beim Programmieren von Netzwerk- und Kommunikationscode begegnen:
NetzwerkschnittstellenMithilfe des NetworkInfo-Objekts können Sie die Hardware- und Softwareschnittstellen ermitteln, die für Ihre Anwendung zur Verfügung stehen. Das NetworkInfo-Objekt ist ein singleton-Objekt; Sie müssen kein solches Objekt erstellen. Verwenden Sie stattdessen die statische Klasseneigenschaft networkInfo, um auf das einzelne NetworkInfo-Objekt zuzugreifen. Das NetworkInfo-Objekt löst auch ein networkChange-Ereignis aus, wenn eine der verfügbaren Schnittstellen sich ändert. Rufen Sie die findInterfaces()-Methode auf, um eine Liste der NetworkInterface-Objekte abzurufen. Jedes NetworkInterface-Objekt in der Liste beschreibt eine der verfügbaren Schnittstellen. Das NetworkInterface-Objekt bietet Informationen wie die IP-Adresse, Hardwareadresse und maximale Übertragungseinheit. Weiterhin gibt es an, ob die Schnittstelle aktiv ist. Mit dem folgenden Codebeispiel werden die NetworkInterface-Eigenschaften jeder Schnittstelle auf dem Clientcomputer verfolgt: 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 );
}
}
}
}
}
}
Weitere Informationen finden Sie unter: Änderungen an NetzwerkverbindungenDie AIR-Anwendung kann in Umgebungen mit unsicheren und sich ändernden Netzwerkverbindungen ausgeführt werden. Adobe AIR unterstützt eine Anwendung bei der Verwaltung von Verbindungen zu Onlineressourcen durch Senden eines Netzwerkänderungsereignisses, wenn der Status einer Netzwerkverbindung zu verfügbar oder nicht verfügbar wechselt. Sowohl das NetworkInfo-Objekt als auch das NativeApplication-Objekt der Anwendung lösen das networkChange-Ereignis aus. Fügen Sie einen Listener hinzu, um auf dieses Ereignis reagieren zu können: NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); Definieren Sie ferner eine Ereignisprozedurfunktion: function onNetworkChange(event:Event)
{
//Check resource availability
}
Das networkChange-Ereignis weist nicht auf eine Änderung der gesamten Netzwerkaktivität hin, sondern nur darauf, dass sich eine einzelne Netzwerkverbindung geändert hat. AIR unternimmt keinen Versuch, die Bedeutung der Netzwerkänderung zu interpretieren. Ein vernetzter Computer kann über zahlreiche reale und virtuelle Verbindungen verfügen. Der Verlust einer Verbindung führt nicht zwangsläufig zum Verlust einer Ressource. Andererseits sind neue Verbindungen auch keine Garantie für eine bessere Ressourcenverfügbarkeit. Manchmal kann eine neue Verbindung sogar den Zugriff auf zuvor verfügbare Ressourcen blockieren (z. B. beim Zugreifen auf ein VPN). Im Allgemeinen kann eine Anwendung nur herausfinden, ob eine Verbindung zu einer Remoteressource hergestellt werden kann, indem sie versucht, die Verbindung herzustellen. Die Dienstüberwachungsarchitektur bietet eine ereignisgestützte Methode, auf Änderungen der Netzwerkverbindung mit einem bestimmten Host zu reagieren. Hinweis: Die Dienstüberwachungsarchitektur erkennt, ob ein Server auf akzeptable Weise auf eine Anforderung reagiert. Eine erfolgreiche Prüfung gewährleistet keine vollständige Konnektivität. Skalierbare Webdienste verwenden häufig Applicances mit Cachefunktion oder Lastausgleich, um Datenverkehr an einen Webservercluster umzuleiten. In diesem Fall bieten Dienstanbieter nur eine teilweise Diagnose der Netzwerkverbindung.
DienstüberwachungDie von der AIR-Architektur separate Dienstüberwachungsarchitektur befindet sich in der Datei „aircore.swc“. Die Architektur kann nur verwendet werden, wenn der Generierungsprozess die Datei „aircore.swc“ umfasst. Bei Adobe® Flash® Builder ist diese Bibliothek automatisch enthalten. Die ServiceMonitor-Klasse implementiert die Architektur zum Überwachen von Netzwerkdiensten und bietet grundlegende Funktionen für die Dienstüberwachung. Eine Instanz der ServiceMonitor-Klasse löst standardmäßig Ereignisse in Bezug auf die Netzwerkverbindung aus. Das ServiceMonitor-Objekt löst diese Ereignisse aus, wenn die Instanz erstellt wird und wenn die Laufzeit eine Netzwerkänderung erkennt. Sie können darüber hinaus festlegen, dass die pollInterval-Eigenschaft einer ServiceMonitor-Instanz die Verbindung unabhängig von allgemeinen Netzwerkverbindungsereignissen in regelmäßigen Abständen in Millisekunden prüft. Ein ServiceMonitor-Objekt prüft die Netzwerkverbindung erst beim Aufrufen der start()-Methode. Die URLMonitor-Klasse, eine Unterklasse der ServiceMonitor-Klasse, erkennt Änderungen bei der HTTP-Verbindung für ein bestimmtes URLRequest. Die SocketMonitor-Klasse, ebenfalls eine Unterklasse der ServiceMonitor-Klasse, erkennt Änderungen bei der Verbindung mit einem bestimmten Host an einem bestimmten Port. Hinweis: Vor AIR 2 wurde die Dienstüberwachungsarchitektur in der Bibliothek „servicemonitor.swc“ veröffentlicht. Diese Bibliothek ist nun veraltet. Verwenden Sie stattdessen die Bibliothek „aircore.swc“.
Flash CS4 und CS5 ProfessionalSo verwenden Sie diese Klassen in Adobe® Flash® CS4 oder CS5 Professional:
Flash CS3 ProfessionalUm diese Klassen in Adobe® Flash® CS3 Professional zu verwenden, ziehen Sie die ServiceMonitorShim-Komponente aus dem Bedienfeld „Komponenten“ in das Bedienfeld „Bibliothek“. Fügen Sie dann die folgende import-Anweisung in den ActionScript 3.0-Code ein: import air.net.*; HTTP-ÜberwachungDie URLMonitor-Klasse ermittelt, ob HTTP-Anforderungen an einer bestimmten Adresse an Port 80 (dem regulären Port für HTTP-Kommunikation) gestellt werden können. Der folgende Code verwendet eine Instanz der URLMonitor-Klasse, um Verbindungsänderungen zur Adobe-Website zu erkennen: 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);
}
SocketüberwachungAIR-Anwendungen können auch Socketverbindungen für Push-Model-Verbindungen verwenden. Firewalls und Netzwerkrouter beschränken die Netzwerkkommunikation an nicht autorisierten Ports normalerweise aus Sicherheitsgründen. Deshalb müssen Entwickler in Erwägung ziehen, dass Benutzer nicht immer die Möglichkeit haben, Socketverbindungen herzustellen. Der folgende Code verwendet eine Instanz der SocketMonitor-Klasse, um Änderungen an einer Socketverbindung zu erkennen. Der überwachte Port ist 6667, der häufig für IRC verwendet wird: 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);
}
Wenn der Socket-Server eine sichere Verbindung erfordert, können Sie die SecureSocketMonitor-Klasse anstelle von SocketMonitor verwenden. DNS-DatensätzeDNS-Ressourcendatensätze (DNS = Domain Name System) können mithilfe der DNSResolver-Klasse ermittelt werden. DNS-Ressourcendatensätze bieten Informationen wie die IP-Adresse eines Domänennamens und den Domänennamen einer IP-Adresse. Sie können folgende Arten von DNS-Ressourcendatensätzen ermitteln:
Zum Ermitteln eines Datensatzes übergeben Sie einen Abfragestring und das Klassenobjekt für den jeweiligen Datensatztyp an die lookup()-Methode des DNSResolver-Objekts. Der verwendete Abfragestring richtet sich nach dem Typ des Datensatzes:
Mit dem folgenden Codebeispiel wird die IP-Adresse des Hosts „example.com“ ermittelt. 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 );
}
}
}
Weitere Informationen finden Sie unter: |
|