2013-05-02 5 views
0

사과 예제 코드에서 reachability.h 및 reachability.m을 사용하여 ip-check를 작성하고 싶습니다.ReachabilityCreateWithAddress 구조체 in_addr, ip-format

+ (Reachability*) reachabilityWithAddress: (const struct sockaddr_in*) ipAddress; 

그래서 그것이를 sockaddr_in 구조체를 가져옵니다 :

나는이 기능을 사용하고 싶습니다.

는 지금까지 얻을 :

struct sockaddr_in ipAddress; 
    ipAddress.sin_len = sizeof(ipAddress); 
    ipAddress.sin_family = AF_INET; 
    ipAddress.sin_port = 80; 
    struct in_addr sin_addr = ???; //??? 
    char  sin_zero[8]; 

IP 주소도 구조체이다.

struct in_addr { 
    in_addr_t s_addr; 
}; 


typedef __uint32_t  in_addr_t; /* base type for internet address */ 

하지만 어떻게 구조체에 IP 주소를 넣을 수 있습니까? 어떤 형식을 사용해야합니까? 예 : 192.168.2.2가 작동하지 않습니다.

미리 감사드립니다.

답변

0

inet_pton() (<arpa/inet.h>에 정의 됨)을 사용하면 네트워크 주소를 포함하는 문자열을 네트워크 형식으로 변환 할 수 있습니다. 그리고 포트 을 호스트 바이트 순서에서 네트워크 바이트 순서로 변환해야한다는 것에 유의하십시오.

struct sockaddr_in ipAddress; 
ipAddress.sin_len = sizeof(ipAddress); 
ipAddress.sin_family = AF_INET; 
ipAddress.sin_port = htons(80); 
inet_pton(AF_INET, "192.168.2.2", &ipAddress.sin_addr); 
+0

안녕하세요, 도와 주셔서 감사합니다. 그러나 그것은 저를 위해 작동하지 않았습니다. IP 주소로 입력 한 문자열이 무엇인지는 중요하지 않습니다. 모든 것이 도달 가능합니다. 예 : "BlaBlabla" – shizophren

+0

@shizophren : 방금 포트 번호를 네트워크 바이트 순서로 변환하는 것을 잊었던 것으로 나타났습니다 (업데이트 된 답변 참조). –

+0

@shizophren : SCNetworkReachability 문서를 살펴보십시오. * "원격 호스트는 응용 프로그램에서 네트워크 스택으로 보낸 데이터 패킷이 로컬 장치를 나갈 수 있다고 판단합니다. 도달 가능성은 데이터 패킷이 실제로 호스트에 의해 수신 될 수 있습니다. "* –