2009-02-11 3 views
1

J'essaie d'accéder 61616 dans mon application iPhone et le code SCReachability indique que j'ai un réseau valide, mais je le temps à essayer d'écrire à 61616. Est-ce que quelqu'un sait:Plage de ports réseau EDGE/3G iPhone? Quelqu'un sait-il?

A. Si l'iPhone EDGE/3G réseau a une plage de ports limitée ou n'est pas autorisé à se connecter à ce port?

B. Comment je peux vérifier explicitement l'accès à ce port. Voici mon code "est le réseau accessible" (emprunté aux exemples d'Apple), qui vérifie "foo.bar.com" mais ne montre pas comment vérifier "foo.bar.com:61616".

Toute aide est appréciée!

- (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; 

}

Répondre

5

L'API SCNetworkReachability vérifie uniquement si l'adresse peut être routée vers. Citant la documentation:

« joignabilité » indique si un paquet de données , envoyé par une application dans la pile réseau, peut laisser l'ordinateur le local. Notez que l'accessibilité ne garantit pas que le paquet de données sera effectivement reçu par l'hôte.

Cela n'a rien à voir avec les restrictions de NAT ou de port. Le routage est basé sur les adresses et non sur les ports. Tout ce que vous pouvez savoir (via l'API SCNetworkReachability) est de savoir si vous pouvez (en théorie) atteindre l'interface de la machine. Il n'essaie pas d'établir une connexion sur un port donné. Donc, pour savoir si ce service est accessible, vous devrez essayer et tester vous-même. De préférence lorsque l'API SCNetworkReachability vous indique qu'une connexion peut être établie. Essayez simplement de vous connecter au serveur sur le port 61616 et voyez si vous avez une connexion ou un timeout. Les valeurs de délai d'expiration et la manipulation appropriées sont cruciales ici.

1

Si votre iPhone est connecté via EDGE/Mobile, il est peut-être derrière une passerelle NAT donc vous être incapable de le contacter. Au moins c'est le cas avec T-Mobile Allemagne. L'iPhone obtient une adresse IP RFC par T-Mobile (172.16.x.x). Je voudrais le tester avec l'iPhone connecté à votre réseau local WiFi et - si possible - généralement concevoir l'application d'une manière que l'iPhone contacte un serveur, puis le serveur peut communiquer avec le téléphone.

2

Ceci est quelque chose qui varie beaucoup non seulement de transporteur à transporteur mais de contrat à contrat. Par exemple, ici, au Royaume-Uni, l'O2 limite l'accès à Internet uniquement aux adresses Web (sans doute les ports 80 et 443, mais je n'ai pas vérifié) pour les clients pay-as-you-go, mais permet plus ou moins d'accès gratuit. Contrat. (J'espère que c'est un peu plus ouvert pour les clients iPhone PAYG.)

Je pense que le résultat pratique est que vous ne pouvez pas supposer l'accès aux ports élevés partout dans le monde.

Je ne suis pas sûr qu'il existe un moyen simple de vérifier qu'un port particulier est ouvert, probablement votre meilleure option est d'utiliser un délai "raisonnable". Bien sûr, il y a un certain nombre de raisons pour lesquelles vous pourriez obtenir le délai d'attente afin que votre erreur devrait être vague appropriée.

0

Etes-vous en train d'essayer de contacter votre iPhone à partir d'une machine externe?

Cela ne fonctionne probablement pas. Habituellement, l'infrastructure GPRS/EDGE/UMTS bloque les connexions entrantes. Sinon, un abonné mobile pourrait être facturé pour un trafic indésirable qu'il n'a pas demandé. (Imaginez que quelqu'un envoie une requête ping à votre iPhone une fois par seconde pendant les six prochaines semaines.)

La solution consiste à établir une connexion entre l'appareil mobile et la machine distante, puis à laisser la machine distante utiliser cette fonction. pour le trafic.

Questions connexes