Android 3G TCP Socket Verbindung zum PC durch NAT

H3llsing

Mitglied
Hallo Liebe Community,

entschuldigt bitte, falls das Thema nicht im richtigen Unterforum gelandet sein sollte, aber ich denke zur mobilen Plattform passt es ganz gut. Jetzt zum Problem.

Ich möchte gerne ein Smartphone mit Android als Server einsetzen. Als Client steht momentan ein Laptop zur Verfügung, kann aber durchaus irgendwann durch ein Tablet oder ähnliches ersetzt werden.
Wichtig ist, dass pro Sekunde mehrere Daten ausgetauscht werden müssen. Das Smartphone liefert alle Sensordaten, die zur Auswertung und Ausrichtung von zusätzlich angeschlossener Hardware benötigt werden.

Also Smartphone -> Sensordaten -> PC -> Berechnung -> Smartphone

WiFi und Bluetooth Verbindungen funktionieren einwandfrei, solang sich beide Geräte im selben Netz befinden.
Nun muss allerdings auch eine Verbindung über Mobile Daten, sprich 3G etc. vom Smartphone aus möglich sein.

Daher meine Frage an euch:
Welche Möglichkeiten gibt es, zuverlässig Daten zwischen Android und PC über 3G auszutauschen?
 

gp

Aktives Mitglied
Über das Providernetz ist erst mal kein Zugriff auf das lokale Netz möglich - was zumindest aus Sicherheitsaspekten gut ist (in Zukunft kann es mit IP6 anders aussehen).

Am Beste wäre es, du könntest eine VPN-Verbindung zum lokalen Netz herstellen. Alternativ per DynDNS auf deinen PC zugreifen. Oder: im Internet steht ein Server, der als Vermittler dienen kann (Handy und PC kommunizieren über den Vermittler).

Ohne Netzwerkkenntinsse wird es für dich aber so oder so schwierig werden.
 
Zuletzt bearbeitet:

H3llsing

Mitglied
DynDNS ist für mich nicht notwendig, da sich die IP nicht alle 2 Stunden wechselt und ein längerer Zeitraum nicht notwendig ist.

Lieber wäre mir natürlich direkt Peer-to-Peer so wie im selben WiFi, jedoch werden die Entfernung und die Störungssignale zu groß. Deshalb soll als Absicherung auch das mobile Internet verwendet werden können.

Wie genau sieht das mit einem Server als Vermittler aus? Muss es ein REST-HTTP-Server sein oder gibt es was besseres? Wie groß ist dann die Verzögerung, mit der die Pakete ankommen ?
Das ganze dient einer Live-Steuerung eines Objektes, auf dem das Telefon verbaut ist und sollte so wenig Verzögerung wie möglich aufweisen.

Gibt es in Richtung VPN- kostenlose Server zum einrichten?
 

gp

Aktives Mitglied
Wie schon gesagt, ohne Netzwerkkenntisse wird es nicht einfach - und deine Antworten zeigen schon ein gewisses Unverständis.

Wie funktioniert das ganze? Dein Handy bekommt vom Provider eine IP-Adresse und ist über diese weltweit erreichbar. Wie lange die gültig ist, entscheidet der Provider - du kannst dich darauf nicht wirklich verlassen.

Änlich in deinem LAN. Erreichbar ist eigentlich nur der Router - der hat eine öffentliche IP-Adresse. Auch diese wechselt, ist meistens aber 24 Stunden gültig. Das Problem: dein PC ist damit nicht über das Internet erreichbar - der Router leitet die Pakete weiter. Wenn dein Programm Socket-gesteuert ist und z.B. wie ein Web-Server am Port 80 lauscht, könntest du den Router so einrichten, dass alle Pakete für den Port 80 zu deinem PC gehen.

Jetzt weiß ich zu wenig über dein Programm. Angenommen der Router ist konfiguriert und dir ist die öffentliche IP bekannt, dann könntest du die einfach im Handy eingeben. Das Handy greift dann über den Router auf den PC zu, dann hat dieser auch die IP des Handys und das Spiel kann beginnen.

Mti DynDNS wird es etwas einfacher, dur ersparst dir die Eingabe der IP am Handy.

Wenn du das so machst, bedenke bitte, dass JEDER über das Internet auf deinen PC über den weitergeleiteten Port zugreifen kann. Ist dein Programm schlecht programmiert, kann dies dazu führen, dass Hacker deinen PC und damit das Netzwerk übernehmen können. Also aufpassen, ich habe dich hiermit gewarnt.

VPN wäre daher besser, aber da musst du dich schon selbst einarbeiten (ist für ein Java-Forum merh als OT).
 

H3llsing

Mitglied
Vielleicht hab ich mich da irgendwie missverständlich Ausgedrückt.
Danke soweit für die Erläuterung.
Die Problematik ist mir schon bewusst, weshalb ich in meinem ersten Post auch ... hopsala hab ich nicht.
Dann nochmal :)

Also ich habe mich in die Richtung auch schon schlau gemacht und mich über NAT Traversal informiert. Von Cisco findet sich eine schöne Präsentation um das ICE mit STUN und TURN Servern zu verstehen.
http://tripleadev.1671093.n2.nabble.com/file/n7580697/ICE44p.pdf
Das schöne an dem ICE ist, es lößt genau die Probleme die du ansprichst. Es entstehen beim benutzen der Methoden keine Sicherheitslücken.

Es existieren auch verschiedene Bibliotheken wie ice4j für java, welche allerdings noch keine TCP implementationen haben.

Über meine Programme:
Das Smartphone wird auf einem mobilen Gerät verbaut, sendet Sensordaten zum PC-Programm. Dieses wertet die Daten aus und berechnet den best möglichsten weg. Danach wird es dem Smartphone sagen, welche Servos es wie einstellen soll, um zum Ziel zu gelangen.

Höchstwahrscheinlich soll später der PC zur ein mobiles gerät ersetzt werden, zB ein Tablet zum besseren Steuern der mobilen Komponente. Da würde bedeuten, dass zwei smartphones untereinander über 3G kommunizieren müssten und Datenpakete austauschen.
Das würde laut deiner Aussage über einen interkommunikations Server realisierbar sein, an dem sich beide Geräte anmelden richtig? Der würde dann nur noch das weiterleiten der Pakete übernehmen?

ich schau nochmal nach VPN, ob das über 3G sich ebenfalls wie im Wifi verhält.
 

dzim

Top Contributor
Also irgendwie finde ich den gesamten Ansatz etwas komisch.
Warum sollen die Daten weggeschickt werden? Was macht der PC (oder später das Tablet), was das Smartphone nicht kann?

Warum willst du TCP-Packete verschicken? Sockets aufmachen kannst du mit den entsprechenden Berechtigungen natürlich mit jeder Internetverbindung, egal ob 2G, 3G, 4G oder WiFi!
Warum nicht einen Rest-Service nutzen, einen Post mit deinen Sensor-Daten hinschicken und dann einfach das Ergebnis vom Server lesen. Ich würde mich hüten hier ein eigenes Protokoll aufzubauen und Packetweise TCP zu verwenden. Nicht weil es nicht geht, sondern weil es einfach Overkill ist.

Ich würde immer einen festinstallierten Server verwenden. Das Tablet später könnte sich per WebSocket auf den Server verbinden und die aktuellen Daten des Smarthones dann hübsch aufbereitet vom Server zugesendet bekommen...
 

gp

Aktives Mitglied
Die eine Frage ist, wie weit sind die beiden Geräte voneinander entfernt? Es gibt ja auch WLAN-Ad-hoc Verbindungen - aber das nur am Rande.

Wenn wir also von 2 mobilen Geräten sprechen, die auch weit voneinander entfernt arbeiten, gibt es verschiedene Möglichkeiten. Die IP-Adressen könnten z.B. per E-Mail ausgetauscht werden - also mit etwas Handarbeit verbunden. Du könntest auch einen Root-Server mit fixer IP mieten -mit dem könnten beide Geräte Kontakt aufnehmen und vielleicht nur die IP-Adressen übermitteln. Der Root-Server könnte auch die Kommunikation vermitteln - sogar etwas asynchron, falls mal ein Gerät nicht erreichbar ist.

Jetzt wird ja auch irgendwie kommuniziert - der Ausgang ginge dann zum Root-Server, der schickt weiter an die andere Station und der Rückweg geht entsprechend. Da es hier ein wenig zeitkritsich ist, wohl ein machbarer Weg.

Wenn du auf der grünen Wiese anfängst, solltest du schon nach einem Standard suchen - ein Webserver mit REST-Protokoll ist sicher eine gute Wahl. Nutze auf jeden Fall Standards und nichts, was von (Router-) Hardware abhängt - wer weiss, was die Zukunft bringt.

Und nochmal: bei allem was über das Internet geht, immer die Sicherheit der Kommunikation beachten.
 

H3llsing

Mitglied
Zu beginn habe ich beide Geräte nebeneinander, ein Eintrag der IP ist also unproblematisch.
Bei dem REST-Server stimme ich dir zu.
Diesen Weg habe ich heute Nacht auch schon eingeschlagen und bin dabei einen REST-Server mit Jersey auf der PC Seite zu integrieren.
Die Idee ist dann, dass das Smartphone alle Sensordaten mit POST updated und sich nur die Servos mit GET besorgt. Der PC oder das Steuergerät besorgt sich dann alle Sensordaten und pusht die berechneten Servo daten drauf.
Dann wird diese Variante nur mit automatischen Pushs vom Smartphone aus arbeiten, was glaube ich nicht weiter schlimm ist.

Vielen Dank für die Zeit und Mühe!
 

H3llsing

Mitglied
Ich wollte noch kurz die Lösung verkünden.

Nach einigen Test ist es also möglich mit Jersey und Java einen REST-HTTP-Server zu hosten der dann durch Port weiterleitung im Router auch extern erreichbar ist.
Dann wurd ein HTTP-Client mit AsyncTask auf der Android Seite implementiert, der nun über mobileDaten auf den REST-Server zugreifen kann, wenn er die IP kennt.

Wie das ganze mit Geschwindigkeit aussieht, muss noch getestet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Socket Verbindung AsycTask Android & Cross-Platform Mobile Apps 5
Noahscript Android Socket.connect() wiederholt sich mehrmals? Android & Cross-Platform Mobile Apps 4
N Android HTTPClient vs HttpUrlConnection vs Socket Verständnisproblem Android & Cross-Platform Mobile Apps 4
F Android: Socket.isConnected funktioniert nicht Android & Cross-Platform Mobile Apps 4
N Android network socket in android Android & Cross-Platform Mobile Apps 4
M Socket Android & Cross-Platform Mobile Apps 2
missy72 Kotlin SSH Verbindung mit JSch Android & Cross-Platform Mobile Apps 5
J Android VPN Verbindung herstellen? Android & Cross-Platform Mobile Apps 4
B Android TCP-Verbindung zum Server über welche Prozess auslagerung nutzen? Android & Cross-Platform Mobile Apps 1
M Problem bei Werteübergabe, MSQL verbindung Android & Cross-Platform Mobile Apps 3
H WIFI, Bluetooth und NFC Verbindung überwachen Android & Cross-Platform Mobile Apps 1
T Android MSSQL Verbindung herstellen - Android Studio Android & Cross-Platform Mobile Apps 2
M Android Server-Client-Verbindung in Android-App mit Sockets aufbauen Android & Cross-Platform Mobile Apps 5
W Android HTTPS-Verbindung mit Client-Authentifizierung Android & Cross-Platform Mobile Apps 0
F Android USB Verbindung zu Windows Programm Android & Cross-Platform Mobile Apps 3
U Android Https-Verbindung Android & Cross-Platform Mobile Apps 2
K Java ME Bluetooth verbindung parameter Android & Cross-Platform Mobile Apps 3
N Java ME Server-Client Verbindung über Wifi Android & Cross-Platform Mobile Apps 6
A Problem mit HTTP- Verbindung Android & Cross-Platform Mobile Apps 4
N Handy -PC Verbindung Android & Cross-Platform Mobile Apps 2
N Blutooz-Verbindung ... ich schaffs nicht Android & Cross-Platform Mobile Apps 5
F Server - Client Verbindung mit Java ME Android & Cross-Platform Mobile Apps 3
G Bluetooth Verbindung zwischen Handy und PC Android & Cross-Platform Mobile Apps 5
G Bluetooth Verbindung Android & Cross-Platform Mobile Apps 2
O Bluetooth Verbindung zwischen 2 Handys Android & Cross-Platform Mobile Apps 5
K HTTP-Verbindung mit J2ME.... Android & Cross-Platform Mobile Apps 2
H Android Nullpointer Exception bei Methodenaufruf durch MainActivity Android & Cross-Platform Mobile Apps 3
CT9288 Methode von Fragment durch Activity rufen scheitert Android & Cross-Platform Mobile Apps 7
B Android Kontrolle ob in Reichweite durch zeitlich versetzte If Abfrage oder Delay? Android & Cross-Platform Mobile Apps 1
F Mit Canvas zeichen und durch einen Timer aktualiesieren Android & Cross-Platform Mobile Apps 1
K Grafik Tablerow, Button erstreckt sich in der gesamten Breite trotz Beschrenkung durch (max)width Android & Cross-Platform Mobile Apps 2
D Android Java-Umfang durch Apps-Entwicklung? Android & Cross-Platform Mobile Apps 1

Ähnliche Java Themen

Neue Themen


Oben