Frage

Ich versuche, 61616 in meinem iPhone App für den Zugriff auf und die SCReachability Code zeigt an, dass ich eine gültige Netzwerk haben, aber ich versuche zu 61616. schreiben Timeout Wer weiß:

A. Wenn das iPhone EDGE / 3G-Netz hat einen begrenzten Portbereich oder ist nicht auf diesen Port verbinden erlaubt?

B. Wie kann ich an dieser Port explizit für den Zugang zu überprüfen. Hier ist mein „ist das Netzwerk erreichbar“ Code (entlehnt von der Apple-Beispiele), die für „foo.bar.com“ prüft aber zeigt nicht, wie für „foo.bar.com:61616“ überprüfen.

Jede Hilfe ist willkommen!

- (BOOL)isDataSourceAvailable{
static BOOL checkNetwork = YES;
BOOL _isDataSourceAvailable = NO;
if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
    checkNetwork = NO;

    Boolean success;    
    const char *host_name = "foo.bar.com";

    SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
    SCNetworkReachabilityFlags flags;
    success = SCNetworkReachabilityGetFlags(reachability, &flags);
    _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
    CFRelease(reachability);
}
return _isDataSourceAvailable;

}

War es hilfreich?

Lösung

Die SCNetworkReachability API prüft nur, ob die Adresse weitergeleitet werden. Unter Angabe der Dokumentation:

  

„Erreichbarkeits“ zeigt an, ob ein Datum   Paket, von einer Anwendung gesendet in   der Netzwerk-Stack, kann die lokale verlassen   Computer. Beachten Sie, dass die Erreichbarkeit tut   nicht garantieren, dass das Datenpaket   wird durch den Host tatsächlich empfangen werden.

Das hat nichts mit NAT oder Portbeschränkungen zu tun. Das Routing wird auf Adressen basieren - nicht auf Ports. So kann alles, was Sie herausfinden (über SCNetworkReachability API) ist, ob man (theoretisch) erreichen konnte die Schnittstelle der Maschine. Es versucht nicht, eine Verbindung zu einem bestimmten Port herzustellen.

Also, um zu erfahren, ob dieser Dienst erreichbar ist, dass Sie müssen versuchen, sich selbst zu testen. Vorzugsweise, wenn die SCNetworkReachability API Sie sagt, dass eine Verbindung hergestellt werden kann. Versuchen Sie einfach auf den Server auf Port 61616 und sehen, ob Sie eine Verbindung oder ein Timeout erhalten zu verbinden. Die richtigen Timeout-Werte und die Behandlung ist hier entscheidend.

Andere Tipps

Das ist etwas, das eine Menge von nicht nur Träger zu Träger variiert aber von Vertrag Vertrag. Zum Beispiel hier in Großbritannien O2 Internet-Zugang beschränken sie nur auf Web-Adressen (vermutlich Ports 80 und 443, aber ich habe nicht überprüfen) für Pay-as-you-go-Kunden, sondern mehr oder weniger freien Zugang für Menschen auf einem zulassen Vertrag. (Ich hoffe, dass es ein wenig mehr offen für iPhone Umlage Kunden ist.)

Ich denke, die praktische Folge davon ist, dass Sie nicht der Zugang zu hohen Häfen überall auf der Welt übernehmen.

Ich bin nicht sicher, dass es eine einfache Möglichkeit, zu überprüfen, ob ein bestimmt Port offen ist, wahrscheinlich die beste Wahl ist es, ein „vernünftiges“ Timeout zu verwenden. Natürlich gibt es eine Reihe von Gründen den Timeout Sie erhalten konnten, so würde Ihre Fehler geeignet vage sein müssen.

Wenn Sie Ihr iPhone über EDGE / Handy angeschlossen ist, könnte es also hinter einem NAT-Gateway sein, das Sie nicht in der Lage, es zu kontaktieren. Zumindest ist das der Fall bei T-Mobile Deutschland. Das iPhone wird eine RFC-IP-Adresse, die von T-Mobile (172.16.x.x).

Ich würde es mit dem iPhone testen zu Ihrem lokalen WiFi Netz verbunden ist und - wenn möglich - in der Regel die Anwendung in einer Weise zu gestalten, dass die iPhone-Kontakte einen Server und dann kann der Server mit dem Telefon kommunizieren

.

Versuchen Sie Ihr iPhone von einem externen Gerät kontaktieren?

Das wahrscheinlich nicht funktioniert. Normalerweise sind die GPRS / EDGE / UMTS-Infrastruktur blockiert eingehende Verbindungen. Ansonsten ein mobiler Teilnehmer für unerwünschten Datenverkehr könnte in Rechnung er nicht angefordert. (Stellen Sie sich vor jemand Ihr iPhone einmal pro Sekunde für die nächsten sechs Wochen Pingen. Sie würden dafür bezahlen ...)

Die Lösung ist eine Verbindung vom mobilen Gerät auf den entfernten Rechner aufzubauen und dann den Remote-Computer für den Verkehr verwendet wird, dass lassen.

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