Frage zu App mit Internetzugriff

16-Bit

Lt. Commander
Registriert
März 2010
Beiträge
1.224
Hi!
Ich bin gerade dabei eine App fürs iPhone zu schreiben. Das ganze ist Client / Server basiert. Bisher hab ich nur im lokalen Netzwerk getestet. Soweit so gut. Aber viele Nutzer sitzen ja hinter einem Router usw. Was ist da eigentlich das Vorgehen, wenn man eine Kommunikation aufbauen will? Der Server sieht ja nicht die IP vom iPhone sondern vom Router. Wie machen App Anbieter das ohne dass man Ports einrichten muss?

Danke!
 
Der Server ist unter einer festen IP mit festen Port erreichbar. Der Client baut dann eine Verbindung zu dieser IP und Server auf. Ist das natürlichste der Welt im Internet. Du gehst ja ständig mit irgend was ins Netz. Selbst eine einfach Website über den Browser aufzurufen ist ja im Grunde nix anderes als ein Client der was von einem Server will.
 
16-Bit schrieb:
Wie machen App Anbieter das ohne dass man Ports einrichten muss?
Ganz normal, denn dafür haben Router ein NAT. Lies dich da mal ein. Ports freigeben musst du überhaupt nicht als Client - das musst du nur wenn du selbst als Server agierst. Ich bezweifel, dass eine App hierbei irgendwas anbietet, es sei denn irgendwas ist daran P2P-basierend.
 
Also bei mir tritt ja auch der Fall auf, dass der Server dem iPhone (hat im lokalen Netz z.b. die 192.168.1.50) gezielt Daten schickt. Die NAT Tabelle kenne ich. Wenn der Router meinetwegen 147.15.47.154 hat, dann schicke ich als Server an 147.15.47.154:7488, wenn der Router weiß, dass er Pakete mit dem Port 7488 an die IP 192.168.1.50 weiterleiten muss. Aber der Router weiß das ja nicht automatisch, oder?
 
Zuletzt bearbeitet:
Dann lass den Client regelmäßig nachfragen obs was neues gibt. Oder lass die Verbindung einfach offen.
Kommt drauf an, wie oft du Daten schickst und wie schnell der Client reagieren soll.
Erstes ist z.B. ne Lösung für Mail-Apps. Die fragen einfach alle 5 Minuten ob der Server neue Mails hast. Letztere nutzt z.B. Skype. Beim Anmelden wird ne Verbindung zum Server eröffnet (evtl. am Leben erhalten über einen Heartbeat) und die bleibt dann auf, bis man sie beendet und in der zwischen Zeit können beide Daten an den anderen senden.
 
Zuletzt bearbeitet:
Nilson schrieb:
Dann lass den Client regelmäßig nachfragen obs was neues gibt. Oder lass die Verbindung einfach offen.

Ok. Aber dafür dass ein Verbindung (also auch die Richtung Server->iPhone) zustande kommt, muss doch irgendwann einmal geklärt werden, wohin der Server ünerhaupt schicken soll. Wie bekommt er das raus?
 
s. Ergänzung ;) Der erste Schritt muss vom Client kommen.
 
Ich kann dir Folgen. Aber das iPhone MUSS doch an seinen Eintrag in der NAT Tabelle kommen. Sonst funktioniert es nicht. Wie?
 
Das ist nur Sache des Routers

Z.B. Client 10.10.10.10:80; Server 12.45.6.7:80; Router (lokal): 10.10.10.1 Router (WAN): 13.45.123.4

Client sendet ein Paket mit Zieladresse Server zum Router. Router erkennt, dass es das erste Paket dieser Art ist und legt einen neuen NAT Eintrag mit einem zufälligen Port an. Z.B. 12567.
Der Router übersetzt nun das Paket mit Absender 10.10.10.80 und Ziel 12.45.67.7:80 zu einem Paket mit Absender 13.45.123.4:12567 und sendet das an der Server.
Der Server Antwortet nun mit einem Paket mit Absender 12.45.6.7:80 und Ziel: 13.45.123.4:12567. Das Paket kommt am Router an. Der Router erkennt: Aha, das ist die Verbindung von eben und übersetzt das Paket zu einem mit Ziel: 10.10.10.10:80.

Weder Server noch Client bekommen etwas von dieser Übersetzung mit.
 
Zuletzt bearbeitet:
Danke! Jetzt verstehe ich es! :)
 
Zurück
Oben