2010-07-24 5 views
9

J'ai travaillé sur un projet pendant un certain temps et il a un serveur HTTP intégré qui fonctionne sur le port 8080. Les utilisateurs sont invités à accéder à l'appareil via, par exemple. http://192.168.1.4:8080/ - fonctionne très bien. Récemment J'ai réalisé que les applications peuvent utiliser le port 80 pour supprimer le besoin de ": 8080", mais si j'essaie de définir le port à 80, je reçois un plantage avec "Erreur CFSocket générale".Serveur Web sur le port 80 sur l'iPhone

Des idées comment activer le port 80 pour un serveur web sur une application?

Quelques captures d'écran où cela se passe:

d'abord - sur l'iPad, l'application affiche les URL où vous pouvez accéder.

iPad http://enrogue.com/port80/ipad.jpg

Second - Firefox, par IP:

FF by IP http://enrogue.com/port80/firefox_byip.png

ci-dessus sont d'une application réelle sur le magasin, ce n'est pas jailbreaké magique ou quoi que ce soit. Je sais que les ports < 1024 sont réservés à l'administrateur sur les systèmes UNIX, donc l'application ci-dessus fait évidemment quelque chose de spécifique pour avoir accès au port.

+1

Toute chance une autre application utilise ce port, ou vous avez ouvert le port du passé avec votre application et oublié de nettoyer correctement? Essayé de mettre hors tension et de revenir sur le téléphone, puis essayer frais? – Steve

+0

J'ouvre mon application, plantage, ouvre une autre application, fonctionne, ouvre mon application, plantage. Non, pas un problème de nettoyage. – Kalle

+0

Oh, et ce n'est pas iOS 4 donc pas d'autres applications sont en cours d'exécution. Et je pense que le fait de conserver une socket réseau dans iOS 4 en arrière-plan entraîne la fermeture immédiate, ce qui ne devrait donc pas être le cas. – Kalle

Répondre

5

Vous pouvez lier au port 80 sur l'interface IPv4 du périphérique, mais pas sur l'interface IPv6 et pas dans le simulateur. Vous devrez modifier votre code de socket pour écouter uniquement sur l'interface IPv4, pour le simulateur, vous pouvez conditionnellement utiliser un autre port:

#if TARGET_IPHONE_SIMULATOR 
    [httpServer setPort:8080]; 
#else 
    [httpServer setPort:80]; 
#endif 
+0

Je ne cours pas sur le Sim, donc ce n'est pas le problème - je suppose que le code de socket est le coupable alors. Va piquer et commenter encore! – Kalle

+0

Saint ... ça a marché. Vous rock, M. Matt! :) – Kalle

+0

Cela laisse bien sûr le problème: qu'en est-il des utilisateurs qui veulent IPv6? Je suppose que vous pourriez mettre une valeur de configuration quelque part qui active IPv6 si le port est> 1024, mais hm, de préférence Apple devrait juste vous laisser utiliser le port 80, point. – Kalle

4

L'iPhone est basé sur unix. Les ports inférieurs à 1024 sont réservés au superutilisateur/root. Vous devez être root pour utiliser ces ports.

+0

Oui. En d'autres termes, vous ne pouvez pas ouvrir les ports en dessous de 1024, sauf en cas d'exécution en tant que root sur un téléphone jailbreaké. –

+0

J'ai supposé que c'était le cas, ce qui n'est évidemment pas le cas, car les applications accèdent au port 80. Découvrez le partage d'air. C'est un peu cher, mais ça le fait. au moins la version HD pour iPad. – Kalle

Questions connexes