'네트워크 모니터링'에 해당되는 글 1건

  1. 2009.02.15 네트워크 모니터링 6

데스크탑 어플리케이션을 만들다보면 네트워크 연결 유/무 상태를 체크하여야 한다. 가령 가계부라던가 메모보드라던가를 만들때는 웹에서 제공하는 DB를 읽어 들여야 하는데 이를 공지하거나 로컬DB에 저장하였다가 네트워크 연결시 DB를 업데이트 한다던가 하기위해 사용한다.

AIR에서는 URLMonitor()와 SocketMonitor()를 제공한다.
URLMonitor인 경우 등록된 도메인의 연결여부를 확일 할 수 있다.
//모니터링할 사이트 등록
_monitor  = new URLMonitor( new URLRequest("http://www.naver.com/") )
_monitor.addEventListener(StatusEvent.STATUS , statusHandler )
//1초에 한번씩 폴링
_monitor.pollInterval = 1000
//모니터링 시작
_monitor.start();

function statusHandler( e:StatusEvent ):void
{
    txt.text += "naver,com available? "+_monitor.available+"\n"
}
위의 코드는 네트워크의 연결상태를 1초마다 한번씩 체크하도록 폴링해보았다. 기본적으론 처음 한번과 이상시 이벤트가 발생한다. 그러나 웹 서버문제인 경우를 대비하여 폴링을 설정하는 경우가 필요하다.

import air.net.SocketMonitor;

private var _monitor:SocketMonitor;
private var _socket:Socket;
private var _timer:Timer;   
private const SERVER:String = "time-A.timefreq.bldrdoc.gov"
private const PORT:int = 13; 
   
private function init():void
{
    _monitor = new SocketMonitor(SERVER , PORT);
    _monitor.addEventListener( StatusEvent.STATUS , statusHandler );
    _monitor.start();
    
    _socket = new Socket();
    _socket.addEventListener( ProgressEvent.SOCKET_DATA , socketDataHandler );
    
    _timer = new Timer(1000);
    _timer.addEventListener(TimerEvent.TIMER , timerHandler );
}
   
private function statusHandler( e:StatusEvent ):void
{
    if(!_monitor.available){
     timeText.text = "Server unavailable."
     _timer.stop();
    }else{
     timerHandler();
     _timer.start();
    }
}
   
private function socketDataHandler( e:ProgressEvent ):void
{
    
//시간 읽어 오기
    var fullTime:String = _socket.readUTFBytes( _socket.bytesAvailable );
    var time:String = fullTime.split( " " )[2]
    timeText.text = "the current time(UTC) is : " + time;
    _socket.close();
}
   
private function timerHandler( e:TimerEvent = null ):void
{
    
//네트워크 상태 읽기
    if( _monitor.available && !_socket.connected ){
     _socket.connect(SERVER , PORT)
    }    
}

위의 코드는 포트 13번의 미국 표준 기술 연구소서버에서 시간을 읽어오는 소켓모니터링이다.
Posted by 버터백통