2012-07-09 54 views
4

我試圖檢查服務器是否是在線還是離線:我面對它連接到它可達性與地址 - 服務器和端口 - iOS 5的

我的代碼的時刻,當有一個端口的問題:

struct sockaddr_in address; 
address.sin_len = sizeof(address); 
address.sin_family = AF_INET; 
address.sin_port = htons(25667); 
address.sin_addr.s_addr = inet_addr("fr7.mooshroom.net"); 

Reachability *reachability = [Reachability reachabilityWithAddress:&address]; 

請讓我知道我做錯了什麼。請不要把我和其他問題聯繫起來,我已經搜查過了,他們都沒有找到我要找的東西。

+1

我懷疑輸入參數的函數inet_addr,你可以用ip地址代替嗎? – 2012-07-09 13:20:53

回答

1

我現在已經修好了,我需要把線:
const char *serverIPChar = [serverIP cStringUsingEncoding:NSASCIIStringEncoding];
並更換inet_addr裏面的「fr7.mooshroom.net」到serverIPChar。無論如何,謝謝

+0

爲什麼-1解決了它的答案? – 21zach2 2012-07-12 11:27:13

+1

也許他們不明白你的答案?那麼你現在使用的是IP地址嗎?我沒有給你一個負面的觀點,那會花費我太多。 ;-)我認爲你沒有提供你的問題的答案。 – HotFudgeSunday 2012-11-28 18:11:37

5

基本上inet_addr()函數不會爲您做域名解析。你需要傳遞一個IP地址(例如127.0.0.1)。

要將DNS名稱解析爲IP地址,您需要查看標準gethostbyname()函數。

澄清:

struct hostent *host = gethostbyname("fr7.mooshroom.net"); 
if (host) { 
    struct in_addr in; 
    NSLog(@"HOST: %s" , host->h_name); 
    while (*host->h_addr_list) 
    { 
     bcopy(*host->h_addr_list++, (char *) &in, sizeof(in)); 
     NSLog(@"IP: %s", inet_ntoa(in)); 
    } 
} 

現在,說了這麼多,你確定這是怎麼回事你想要做什麼?對於SCNetworkReachabilityRef文檔建議不:

http://developer.apple.com/library/ios/#documentation/SystemConfiguration/Reference/SCNetworkReachabilityRef/Reference/reference.html

「A遠程主機被認爲是可到達時的數據包,通過一個 應用到網絡棧發送的,可以離開本地設備 可達性不保證。數據包實際上是主機收到的 。「

+0

我不需要主機接收數據,我只需要找出它的在線還是離線。 – 21zach2 2012-07-11 12:13:11

+0

我的觀點是你要加入這個端口的額外努力,但目前還不清楚Reachability甚至使用它。理解? – ChrisH 2012-07-11 12:23:08

+0

我已經做到了。它現在有效。查看我的答案,看看如何 – 21zach2 2012-07-11 12:26:43

相關問題