iOS SDK: Как я могу проверить, открыт ли порт? - PullRequest
4 голосов
/ 13 июня 2011

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

1 Ответ

1 голос
/ 31 декабря 2011

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

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

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

...