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

4

我还没有找到如何检查端口是否开放的方法。我尝试使用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];

你尝试过对IP地址进行Nmap扫描吗? - corroded
1个回答

1

你需要将自己设置为代理并处理onSocket:willDisconnectWithError:方法。连接是完全异步的,因此除非存在基本系统问题(禁用套接字,传递无效地址等),否则该调用将始终成功,而套接字连接尝试将在后台进行。

如果连接尝试失败,则会调用onSocket:willDisconnectWithError:代理方法,以便您可以知道连接尝试失败。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接