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

Posted

技术标签:

【中文标题】iOS SDK:如何检查端口是不是打开?【英文标题】:iOS SDK: How can I check if a port is open?iOS SDK:如何检查端口是否打开? 【发布时间】:2011-06-13 11:20:18 【问题描述】:

我还没有找到任何关于如何检查端口是否打开的信息。我尝试使用 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];

【问题讨论】:

你试过 nmaping ip 地址吗? 【参考方案1】:

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

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

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

【讨论】:

以上是关于iOS SDK:如何检查端口是不是打开?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查网络端口是不是打开?

如何在 Quickblox iOS SDK 中检查会话是不是有效或过期?

如何使用 corona sdk 检查我的应用程序之一是不是安装在 IOS 设备中

如何检查客户端的网络/防火墙是不是打开端口?

如何检查客户端的网络/防火墙是不是打开端口?

检查服务器端口是不是从 Android 打开