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

iOS SDK: How can I check if a port is open?

提问人:Daniel Mühlbachler-P. 提问时间:6/13/2011 最后编辑:garyDaniel Mühlbachler-P. 更新时间:9/26/2012 访问量:3892

问:

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

到目前为止,我的代码:

//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];
iPhone iOS 套接字 端口 asyncsocket

评论

0赞 corroded 9/16/2011
您是否尝试过 IP 地址的 nmapping?

答:

1赞 russbishop 12/31/2011 #1

您需要让自己成为委托人并处理 onSocket:willDisconnectWithError: 方法。连接是完全异步的,因此除非存在根本的系统问题(套接字被禁用、您传入的地址无效等),否则当套接字连接尝试在后台进行时,该调用将始终成功。

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

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