UDP-Adressierung und Push Funktion für Messenger

  • Antworten:4
Tobi T
  • Forum-Beiträge: 3

24.01.2012, 12:32:52 via Website

Hi,

ich versuche mich grade an einer App, die ganz simpel Nachrichten austauschen soll.

Habe es soweit das die App per UDP eine Nachricht an einen Java-Server schickt und dieser auch antwortet.

Jetzt wäre die Frage wie es per UDP möglich ist, eine Nachricht an jemand anderen zu senden, also die Adressierung fehlt mir noch.
Muss sich jeder Client per UDP kurz anmelden, damit der Server die IP des Users bekommt? Was passiert wenn das Handy die Verbindung verliert und sich neu einwählt? Muss die App sich wieder beim Server melden?

Die zweite Frage wäre wie ich einen Push-Service realisiere.
Die oben genannte "Anmeldung" zum registrieren der IP wäre ja nicht möglich wenn die App nicht läuft. Wie kann ich dann den Client adressieren ohne IP und ihm eine Push Nachricht schicken?

Wäre das ganze mit TCP sinnvoller? Dort würde der Client ja eine "dauerhafte" Verbindung herstellen, somit hätte der Server jederzeit die IP des Clients.
Dann müsste aber die App dauerhaft im Hintergrund laufen und die Internetverbindung regelmäßig nutzen um dem Server ein Lebenszeichen zu schicken. Das würde ja CPU und Akku unnötig belasten.

Hoffe das mir einer da etwas auf die Sprünge helfen kann.

Danke schon mal.

Grüße Tobi

— geändert am 24.01.2012, 13:00:47

Antworten
Felix
  • Forum-Beiträge: 259

24.01.2012, 17:42:31 via Website

Tach!

Jetzt wäre die Frage wie es per UDP möglich ist, eine Nachricht an jemand anderen zu senden, also die Adressierung fehlt mir noch.

Ein UDP-Paket geht an eine anzugebende IP-Adresse. Die musst du wissen, wie die Post-Anschrift, sonst bekommst du an den Empfänger nichts hingeschickt.

Muss sich jeder Client per UDP kurz anmelden, damit der Server die IP des Users bekommt?

Der User könnte auch eine Postkarte an den Server-Admin senden … Wie der Server zu erreichen ist, steht im allgemeinen fest. IP-Adressen der Clients sind üblicherweise unbekannt. Also muss der Client irgendwie eine Verbindung zum Server aufnehmen, um sich bekanntzumachen. Auch Dienste wie C2DM können das prinzipiell nicht anders.

Was passiert wenn das Handy die Verbindung verliert und sich neu einwählt? Muss die App sich wieder beim Server melden?

Nur, wenn sie vom Server Pakete gesendet bekommen möchte.

Die zweite Frage wäre wie ich einen Push-Service realisiere.
Die oben genannte "Anmeldung" zum registrieren der IP wäre ja nicht möglich wenn die App nicht läuft. Wie kann ich dann den Client adressieren ohne IP und ihm eine Push Nachricht schicken?

C2DM kann das für dich übernehmen.

Wäre das ganze mit TCP sinnvoller? Dort würde der Client ja eine "dauerhafte" Verbindung herstellen, somit hätte der Server jederzeit die IP des Clients.

Auch hier muss der Client die Initiative übernehmen. Der Vorteil (besonders, wenn du auf HTTP setzt) ist, dass das besser mit Firewalls und NATs funktioniert. Deren Aufgabe beziehungsweise technische Beschränktheit ist, Pakete von außen abzuwehren respektive nicht zustellen zu können.

Dann müsste aber die App dauerhaft im Hintergrund laufen und die Internetverbindung regelmäßig nutzen um dem Server ein Lebenszeichen zu schicken. Das würde ja CPU und Akku unnötig belasten.

Prinzip erkannt.


Felix.

Antworten
Tobi T
  • Forum-Beiträge: 3

25.01.2012, 07:48:44 via Website

Hi,

erstmal Danke für deine Hilfe.

Also zuerst mal hab ich jetzt UDP aufgegeben. Die erste Überlegung war halt, das es keine persistente Verbindung erfordert, was für das Senden von kleinen Nachrichten praktisch wäre. Aber die Nachteile sind halt, das es nicht sicher ist, das die Nachricht auch ankommt und wenn man später doch mal Dateien versenden möchte, ist TCP die bessere Wahl.

Also kann ich jetzt eine "normale" TCP Client/Server Struktur aufbauen. Damit die App auch Nachrichten empfangen kann wenn sie nicht läuft, muss der Push-Service verfügbar sein.

Habe mir jetzt C2DM angeschaut. Jetzt versteh ich auch wie der AppServer den Client erreicht, ohne seine IP zu haben :)

Werde mich jetzt mal da durchackern.

Eventuell hat ja noch jemand ein paar schöne Beispiele mit Code für mich.


Danke und Grüße

Antworten
Florian B.
  • Forum-Beiträge: 284

25.01.2012, 10:25:40 via Website

Dieses Tutorial ist ein ganz netter einstiegt wie ich finde.

Antworten
Tobi T
  • Forum-Beiträge: 3

25.01.2012, 15:46:55 via Website

Danke, werde das durcharbeiten

Antworten