iOS에서 Ping 구현하는 방법

네트워크에 특정 IP의 호스트가 접근가능한지 테스트하는 가장 간단한 방법은? 아마도 Ping으로 확인하는 방법?

ping www.apple.com

보통 이렇게하는 방법이 가장 쉬울 것이다. 네트워크 프로그램을 개발하다 보면 특정 호스트가 지금 접속이 가능한 상태인지 ping으로 주기적으로 테스트하는 코드가 필요할 때가 있다. iOS에서는 어떻게 구현할 수 있을까?

Mac OS X용 샘플코드로 제공되는 SimplePing을 iOS에서 사용할 수 있다. 여기에서 샘플코드를 다운로드 받자.
SimplePing의 사용방법은 간단하다. Ping하고자 하는 대상 IP 주소 혹은 host 이름을 이용하여 SimplePing 인스턴스를 생성한다.

pinger = [SimplePing simplePingWithHostName:@"www.apple.com"];

혹은

struct sockaddr_in addr;
addr.sin_len = sizeof(addr);
addr.sin_port = 0;
addr.sin_family = AF_INET;
inet_pton(AF_INET, "192.168.1.1", &addr.sin_addr);
pinger = [SimplePing simplePingWithHostAddress:[NSData dataWithBytes:&addr length:sizeof(addr)]];

와 같이 IP address 문자열을 이용하여 ping을 시도할 수도 있다. 

SimplePing의 delegate를 지원하기 위해 SimplePingDelegate 프로토콜을 따른다고 선언해주고 delegate를 지정한 후에 start 메시지를 보낸다.

pinger.delegate = self;
[pinger start];

simplePing:didStartWithAddress delegate가 호출되면 sendPingWithData 메시지를 보내 실제 ping data를 전송한다.

- (void)simplePing:(SimplePing *)pinger didStartWithAddress:(NSData *)address
{
    [pinger sendPingWithData:nil];
}

전송한 ping에 정상적인 응답이 받아지면 simplePing:didReceivePingResponsePacket이 호출된다.

- (void)simplePing:(SimplePing *)pinger didReceivePingResponsePacket:(NSData *)packet
{
    NSLog(@"Ping responded");
    [pinger stop];
}

빌드를 위해서는 CFNetwork framework이 필요하다.



댓글

이 블로그의 인기 게시물

Wireless: HotSpot 2.0 이란?

Apple M1 Mac Mini에서 이더리움 (Ethereum) 채굴하기

Java: Java for Game? Java가 Game 개발에 어울릴까?