2010-07-24 16 views
9

Ich habe an einem Projekt für eine Weile gearbeitet und es hat einen integrierten HTTP-Server, der auf Port 8080 ausgeführt wird. Die Benutzer werden aufgefordert, über z. http://192.168.1.4:8080/ - funktioniert gut. Kürzlich Ich erkannte, dass Anwendungen können verwenden Port 80, um die Notwendigkeit für ": 8080" zu entfernen, obwohl, wenn ich versuche, den Port auf 80 einzustellen, bekomme ich einen Absturz mit "General CFSocket error".Webserver auf Port 80 auf dem iPhone

Haben Sie Ideen, wie Port 80 für einen Webserver in einer App aktiviert werden kann?

ein paar Screenshots, wo dies geschieht:

Erste - auf dem iPad ist die App, die URLs zeigt, in dem Sie darauf zugreifen können.

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

Second - Firefox, von IP:

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

die oben von einer realen Anwendung auf dem Speicher ist, ist es nicht jailbroken Magie oder so etwas. Ich weiß, dass die Ports < 1024 für den Admin auf UNIX-Systemen reserviert sind, so dass die obige App offensichtlich etwas Bestimmtes tut, um Zugriff auf den Port zu bekommen.

+1

Jede Chance, eine andere Anwendung diesen Port verwendet, oder geöffnet Sie den Port in der Vergangenheit mit Ihrer Bewerbung und vergessen, richtig aufzuräumen? Versucht, das Telefon aus- und wieder einzuschalten und es dann frisch zu versuchen? – Steve

+0

Ich öffne meine App, stürze ab, öffne andere App, funktioniert, öffne meine App, stürze ab. Nein, kein Aufräumproblem. – Kalle

+0

Oh, und das ist nicht iOS 4, also laufen keine anderen Apps. Und ich denke, ein Netzwerk-Socket in iOS 4 im Hintergrund zu halten führt zu sofortiger Beendigung, so dass es auch dann nicht der Fall sein sollte. – Kalle

Antwort

5

Sie können an Port 80 auf der IPv4-Schnittstelle des Geräts binden, nicht jedoch auf der IPv6-Schnittstelle und nicht im Simulator. Sie müssen Ihre Socket-Code ändern, auf der IPv4-Schnittstelle nur zu hören, für den Simulator Sie bedingt einen anderen Port verwenden können:

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

Ich renne nicht auf dem Sim, das ist also nicht das Problem - ich denke, der Socket-Code ist dann der Schuldige. Will wieder pieken und kommentieren! – Kalle

+0

Heilig ... es hat funktioniert. Du schaukelst, Mr. Matt! :) – Kalle

+0

Das lässt natürlich das Problem: Was ist mit Benutzern, die IPv6 WÜNSCHEN? Ich nehme an, du könntest irgendwo einen Konfigurationswert eingeben, der IPv6 aktiviert, wenn der Port> 1024 ist, aber hm, vorzugsweise sollte Apple dir nur Port 80, Punkt erlauben. – Kalle

4

Das iPhone ist unixbasiert. Ports unter 1024 sind für den Root/Superuser reserviert. Sie müssen root sein, um diese Ports zu verwenden.

+0

Ja. Mit anderen Worten, Sie können keine Ports unter 1024 öffnen, außer wenn Sie als root auf einem Jailbroken-Telefon ausgeführt werden. –

+0

Ich vermutete, dass dies der Fall war, was offensichtlich nicht der Fall ist, da Apps auf Port 80 zugreifen. Schauen Sie sich Air Sharing an. Es ist ein wenig teuer, aber es tut es. zumindest die HD-Version für iPad. – Kalle

Verwandte Themen