2011-06-13 124 views
4

我還沒有發現任何關於如何檢查端口是否打開的問題。我試圖用AsyncSocket類來實現它,但它總是返回TRUE,雖然我拒絕所有到我服務器端口的連接。 此外,我試圖使用AsyncSocket的isConnected方法,但總是返回FALSE。iOS SDK:如何檢查端口是否打開?

我迄今爲止代碼:

//Init socket 
socket=[[AsyncSocket alloc] initWithDelegate:self]; 

//results on TRUE always! 
NSLog(@"Ready"); 

NSError *err = nil; 
if(![socket connectToHost:@"10.1.2.40" onPort:25 error:&err]) 
{ 
    NSLog(@"Error: %@", err); 
} 
else 
{ 
    NSLog(@"Connected"); 
} 
//addition - results in FALSE always! 

if([socket isConnected]) 
{ 
    NSLog(@"yes, its connected"); 
} 
else 
{ 
    NSLog(@"not connected..."); 
} 
[socket disconnect]; 
+0

你嘗試過映射IP地址嗎? – corroded 2011-09-16 06:17:21

回答

1

你需要讓自己的委託,辦理onSocket:willDisconnectWithError:方法。連接是完全異步的,所以除非有一個基本的系統問題(套接字被禁用,你傳遞了一個無效的地址等),那麼這個調用總是會成功,而套接字連接嘗試發生在後臺。

如果該嘗試失敗,將調用onSocket:willDisconnectWithError:delegate方法,以便您知道連接嘗試失敗。

我不知道爲什麼,但AsyncSocket類認爲kCFStreamStatusError流狀態是「連接」,所以我懷疑這就是爲什麼它顯示爲連接。你可以在AsyncSocket的源代碼中關注這一切。