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

标签 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];

最佳答案

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

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

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

关于iphone - iOS SDK : How can I check if a port is open?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6329723/

相关文章:

iphone - UINavigationController 添加 UIView

iphone - UITableView - 当接近底部时自动加载下一个 25...

ios - Google plus 与 Swift 中的 CocoaPods

iphone - CoreData 在返回数组时需要字符串,在返回字符串时需要 NSData

ios - 如何创建圆形和三角形按钮

objective-c - 添加覆盖导航栏的 UIImageView

.net - 通信策略 : Linux to .Net over SSL

C# 异步套接字 : How much data does the Socket store when the call to BeginReceive is delayed?

connect() 到外部 IP 不工作

ios - libobjc dealloc 中的 KERN_PROTECTION_FAILURE(堆栈溢出)