Frage

Ich habe noch nichts gefunden, um zu überprüfen, ob ein Port geöffnet ist oder nicht.Ich habe versucht, es mit der AsyncSocket-Klasse zu realisieren, aber es gibt immer TRUE zurück, obwohl ich alle Verbindungen zu diesem Port auf meinem Server ablehne. Außerdem habe ich versucht, die isConnected-Methode von AsyncSocket zu verwenden, die jedoch immer FALSE zurückgibt.

Mein bisheriger Code:

//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];

War es hilfreich?

Lösung

Sie müssen sich selbst zum Delegaten machen und die Methode onSocket: willDisconnectWithError: verarbeiten.Die Verbindung ist vollständig asynchron. Wenn also kein grundlegendes Systemproblem vorliegt (Sockets sind deaktiviert, Sie haben eine ungültige Adresse übergeben usw.), ist dieser Aufruf immer erfolgreich, während der Socket-Verbindungsversuch im Hintergrund erfolgt.

Wenn dieser Versuch fehlschlägt, wird die Methode onSocket: willDisconnectWithError: delegate aufgerufen, damit Sie wissen, dass der Verbindungsversuch fehlgeschlagen ist.

Ich bin mir nicht sicher, warum, aber die AsyncSocket-Klasse betrachtet den Stream-Status von kCFStreamStatusError als "verbunden", sodass ich vermute, dass er deshalb als verbunden angezeigt wird.Sie können dies alles in der Quelle von AsyncSocket verfolgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top