2011-06-13 119 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的源代码中关注这一切。