Pergunta

Eu não encontrei nada ainda sobre como verificar se uma porta está aberta ou não. Tentei perceber isso com a classe AsyncSocket mas ele retorna sempre verdade, embora eu rejeitar todas as conexões com essa porta no meu servidor. Além disso, eu tentei usar o método isConnected de AsyncSocket mas que sempre retorna FALSE.

O meu código até agora:

//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];
Foi útil?

Solução

Você precisa fazer-se o delegado e lidar com a onSocket: willDisconnectWithError: método. A conexão é totalmente assíncrona de modo a menos que haja um problema no sistema fundamental (soquetes estão desativados, você passou em um endereço inválido, etc), então essa chamada sempre terá êxito enquanto a tentativa de conexão de soquete acontece em segundo plano.

Se essa tentativa falhar, o onSocket: willDisconnectWithError:. Método delegado será chamado para que você possa conhecer a tentativa de conexão falhou

Eu não sei por que, mas a classe AsyncSocket considera o status de fluxo de kCFStreamStatusError a ser "ligado", então eu suspeito que é por isso que ele aparece como conectado. Você pode acompanhar tudo isso na fonte de AsyncSocket.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top