네트워킹 및 통신의 기초Flash Player 9 이상, Adobe AIR 1.0 이상 Flash Player 또는 AIR에서 응용 프로그램을 제작할 때 응용 프로그램 외부의 리소스에 액세스해야 하는 경우가 많습니다. 예를 들어 인터넷 웹 서버에 이미지 요청을 보내고 이미지 데이터를 받을 수 있습니다. 또는 응용 프로그램 서버에 대한 소켓 연결을 통해 직렬화된 객체를 주고 받을 수 있습니다. Flash Player 및 AIR API는 응용 프로그램이 이러한 교환에 참여할 수 있도록 하는 여러 클래스를 제공합니다. 이러한 API는 UDP, TCP, HTTP, RTMP, RTMFP 등의 프로토콜에 대한 IP 기반 네트워킹을 지원합니다. 네트워크를 통해 데이터를 주고받기 위해 사용할 수 있는 클래스는 다음과 같습니다.
웹 응용 프로그램을 만들 때 사용자의 응용 프로그램 상태에 대한 영구 정보를 저장하는 것이 유용한 경우가 많습니다. HTML 페이지 및 응용 프로그램은 이를 위해 일반적으로 쿠키를 사용합니다. Flash Player에서는 이를 위해 SharedObject 클래스를 사용할 수 있습니다. 자세한 내용은 공유 객체를 참조하십시오. AIR 응용 프로그램에서 SharedObject 클래스를 사용할 수 있지만 데이터를 일반 파일에 저장할 때 적용되는 제한이 적습니다. Flash Player 또는 AIR 응용 프로그램이 동일한 컴퓨터에 있는 다른 Flash Player 또는 AIR 응용 프로그램과 통신해야 하는 경우 LocalConnection 클래스를 사용할 수 있습니다. 예를 들어 동일한 웹 페이지에 있는 두 개(또는 그 이상)의 SWF가 서로 통신할 수 있습니다. 마찬가지로 웹 페이지에서 실행되는 SWF는 AIR 응용 프로그램과 통신할 수 있습니다. 자세한 내용은 다른 Flash Player 및 AIR 인스턴스와 통신을 참조하십시오. 로컬 컴퓨터에 있는 SWF 이외의 프로세스와 통신해야 하는 경우 AIR 2에 추가된 NativeProcess클래스를 사용할 수 있습니다. NativeProcess 클래스는 AIR 응용 프로그램이 다른 응용 프로그램을 실행하고 함께 통신할 수 있도록 합니다. 자세한 내용은 AIR의 기본 프로세스와 통신을 참조하십시오. AIR 응용 프로그램이 실행되는 컴퓨터의 네트워크 환경에 대한 정보가 필요한 경우 다음과 같은 클래스를 사용할 수 있습니다.
중요한 개념 및 용어네트워킹 및 통신 코드를 프로그래밍할 때 사용되는 중요한 용어가 아래 참조 목록에 정리되어 있습니다.
네트워크 인터페이스NetworkInfo 객체를 사용하면 응용 프로그램에서 사용할 수 있는 하드웨어 및 소프트웨어 네트워크 인터페이스를 검색할 수 있습니다. NetworkInfo 객체는 단일 객체이므로 만들 필요가 없습니다. 대신 정적 클래스 속성인 networkInfo를 사용하여 단일 NetworkInfo 객체에 액세스하십시오. NetworkInfo 객체는 또한 사용 가능한 인터페이스 중 하나가 변경되는 경우에도 networkChange 이벤트를 전달합니다. NetworkInterface 객체 목록을 가져오려면 findInterfaces() 메서드를 호출합니다. 목록에 있는 각 NetworkInterface 객체는 사용 가능한 인터페이스 중 하나를 설명합니다. NetworkInterface 객체는 IP 주소, 하드웨어 주소, 최대 전송 단위 및 인터페이스의 활성 여부와 같은 정보를 제공합니다. 다음 코드 예제에서는 클라이언트 컴퓨터의 각 인터페이스에 대한 NetworkInterface 속성을 추적합니다. 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 ); } } } } } } 자세한 내용은 다음 항목을 참조하십시오. 네트워크 연결 변경AIR 응용 프로그램은 네트워크 연결이 확실하지 않고 변경되는 환경에서 실행될 수 있습니다. 응용 프로그램에서 온라인 리소스에 대한 연결을 관리하는 것을 지원하기 위해 Adobe AIR은 네트워크 연결을 사용할 수 있게 되거나 사용할 수 없게 될 때마다 네트워크 변경 이벤트를 보냅니다. NetworkInfo 객체 및 응용 프로그램의 NativeApplication 객체는 모두 networkChange 이벤트를 전달합니다. 이 이벤트에 응답하려면 리스너를 추가합니다. NetworkInfo.networkInfo.addEventListener(Event.NETWORK_CHANGE, onNetworkChange); 그런 다음 이벤트 핸들러 함수를 정의합니다. function onNetworkChange(event:Event) { //Check resource availability } networkChange 이벤트는 모든 네트워크 활동의 변경을 나타내지는 않으며 개별 네트워크 연결이 변경된 것만 나타냅니다. AIR에서는 네트워크 변경의 의미를 해석하려고 하지 않습니다. 네트워크에 연결된 컴퓨터에는 많은 실제 연결과 가상 연결이 있을 수 있으므로 연결이 손실되어도 리소스가 반드시 손실되지는 않습니다. 반면에 새로운 연결은 향상된 리소스 가용성을 보장하지 않습니다. 새 연결이 이전에 사용할 수 있던 리소스에 대한 액세스를 차단하는 경우도 있습니다(예: VPN에 연결하는 경우). 일반적으로 응용 프로그램에서 원격 리소스에 연결할 수 있는지 확인하는 유일한 방법은 연결을 시도하는 것입니다. 서비스 모니터링 프레임워크는 지정된 호스트에 대한 네트워크 연결이 변경되는 경우 적용할 수 있는 이벤트 기반 응답 방법을 제공합니다. 참고: 서비스 모니터링 프레임워크에서는 서버가 요청에 적절하게 응답하는지 여부를 감지합니다. 검사가 성공하더라도 연결이 완전히 보장되는 것은 아닙니다. 확장 가능한 웹 서비스에서는 흔히 캐싱 및 로드 균형 조정 도구를 사용하여 트래픽을 웹 서버의 클러스터에 리디렉션합니다. 이 상황에서 서비스 공급자는 네트워크 연결의 부분적 진단만 제공합니다.
서비스 모니터링AIR 프레임워크와는 별도의 서비스 모니터링 프레임워크가 aircore.swc 파일에 있습니다. 이 프레임워크를 사용하려면 aircore.swc 파일이 제작 과정에 포함되어야 합니다. Adobe® Flash® Builder에서는 이 라이브러리를 자동으로 포함합니다. ServiceMonitor 클래스는 네트워크 서비스를 모니터링하기 위한 프레임워크를 구현하고 서비스 모니터에 대한 기본 기능을 제공합니다. 기본적으로 ServiceMonitor 클래스의 인스턴스는 네트워크 연결과 관련된 이벤트를 전달합니다. ServiceMonitor 객체는 인스턴스가 만들어질 때 그리고 런타임에서 네트워크 변경이 감지될 때 이러한 이벤트를 전달합니다. 또한 ServiceMonitor 인스턴스의 pollInterval 속성을 설정하여 일반적인 네트워크 연결 이벤트와 관계없이 지정된 간격(밀리초)으로 연결을 확인할 수 있습니다. ServiceMonitor 객체는 start() 메서드가 호출될 때까지 네트워크 연결을 확인하지 않습니다. ServiceMonitor 클래스의 하위 클래스인 URLMonitor 클래스는 지정된 URLRequest의 HTTP 연결의 변경을 감지합니다. 역시 ServiceMonitor 클래스의 하위 클래스인 SocketMonitor 클래스는 지정된 포트에서 지정된 호스트에 대한 연결의 변경을 감지합니다. 참고: AIR 2 이전 버전에서는 서비스 모니터링 프레임워크가 servicemonitor.swc 라이브러리에서 제작되었습니다. 이 라이브러리는 현재 사용되지 않습니다. 대신 aircore.swc 라이브러리를 사용합니다.
Flash CS4 및 CS5 ProfessionalAdobe® Flash® CS4 또는 CS5 Professional에서 이러한 클래스를 사용하려면 다음 작업을 수행합니다.
Flash CS3 ProfessionalAdobe® Flash® CS3 Professional에서 이러한 클래스를 사용하려면 ServiceMonitorShim 구성 요소를 [구성 요소] 패널에서 [라이브러리]로 드래그하고 다음 import 문을 ActionScript 3.0 코드에 추가합니다. import air.net.*; HTTP 모니터링URLMonitor 클래스는 포트 80(HTTP 통신을 위한 일반적인 포트)에서 지정된 주소에 대한 HTTP 요청을 수행할 수 있는지 확인합니다. 다음 코드에서는 URLMonitor 클래스의 인스턴스를 사용하여 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); } 소켓 모니터링AIR 응용 프로그램에서는 푸쉬 모델 연결을 위해 소켓 연결도 사용할 수 있습니다. 일반적으로 방화벽과 네트워크 라우터는 보안상의 이유로 권한이 없는 포트에서 네트워크 통신을 제한합니다. 이 때문에 개발자는 사용자가 소켓 연결을 설정할 수 없는 경우를 고려해야 합니다. 다음 코드에서는 SocketMonitor 클래스의 인스턴스를 사용하여 소켓 연결에 대한 연결 변경을 감지합니다. 모니터링되는 포트는 IRC에 대한 일반 포트인 6667입니다. 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); } 소켓 서버에 보안 연결이 필요한 경우 SocketMonitor 대신에 SecureSocketMonitor 클래스를 사용할 수 있습니다. DNS(Domain Name System) 레코드DNSResolver 클래스를 사용하여 DNS 리소스 레코드를 조회할 수 있습니다. DNS 리소스 레코드는 도메인 이름의 IP 주소 및 IP 주소의 도메인 이름과 같은 정보를 제공합니다. 다음과 같은 DNS 리소스 레코드의 유형을 조회할 수 있습니다.
레코드를 조회하려면 쿼리 문자열과 레코드 유형을 나타내는 클래스 객체를 DNSResolver 객체의 lookup() 메서드에 전달합니다. 사용할 쿼리 문자열은 레코드 유형에 따라 달라집니다.
다음 코드 예제에서는 “example.com” 호스트의 IP 주소를 조회합니다. 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 ); } } } 자세한 내용은 다음 항목을 참조하십시오. |
![]() |