iOS SDK:如何检查端口是否打开?

时间:2011-06-13 11:20:19

标签: iphone ios sockets port asyncsocket

我还没有找到关于如何检查端口是否打开的任何内容。我试图用AsyncSocket类实现它,但它总是返回TRUE,尽管我拒绝服务器上该端口的所有连接。 另外,我尝试使用AsyncSocket的isConnected方法但总是返回FALSE。

到目前为止我的代码:

//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];

1 个答案:

答案 0 :(得分:1)

您需要使自己成为委托并处理onSocket:willDisconnectWithError:方法。连接完全是异步的,所以除非存在基本的系统问题(套接字被禁用,你传入了一个无效的地址等),那么当套接字连接尝试在后台发生时,该调用将始终成功。

如果该尝试失败,将调用onSocket:willDisconnectWithError:delegate方法,以便您可以知道连接尝试失败。

我不确定为什么但是AsyncSocket类认为kCFStreamStatusError流状态是“已连接”的,所以我怀疑这就是它显示为连接的原因。您可以在AsyncSocket的源代码中遵循所有这些。