iOS SDK: как проверить, открыт ли порт?

Я еще ничего не нашел о том, как проверить, открыт порт или нет. Я пытался реализовать это с помощью класса AsyncSocket, но он всегда возвращает TRUE, хотя я отклоняю все подключения к этому порту на своем сервере. Кроме того, я пытался использовать метод isConnected AsyncSocket, но он всегда возвращает 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];

person Daniel Mühlbachler    schedule 13.06.2011    source источник
comment
Вы пытались nmapping IP-адрес?   -  person corroded    schedule 16.09.2011


Ответы (1)


Вам нужно сделать себя делегатом и обработать метод onSocket:willDisconnectWithError:. Соединение полностью асинхронное, поэтому, если нет фундаментальной системной проблемы (сокеты отключены, вы передали неверный адрес и т. д.), этот вызов всегда будет успешным, пока попытка подключения к сокету происходит в фоновом режиме.

Если эта попытка не удалась, будет вызван метод делегата onSocket:willDisconnectWithError:, чтобы вы могли узнать, что попытка подключения не удалась.

Я не уверен, почему, но класс AsyncSocket считает, что статус потока kCFStreamStatusError «подключен», поэтому я подозреваю, что именно поэтому он отображается как подключенный. Вы можете следить за всем этим в исходниках AsyncSocket.

person russbishop    schedule 30.12.2011