Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   IndyServer auf Android mit mobilen Daten nicht erreichbar (https://www.delphipraxis.net/213480-indyserver-auf-android-mit-mobilen-daten-nicht-erreichbar.html)

AndyBo 4. Aug 2023 10:46

IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Hallo
ich habe ein kleines Programm mit einem IndyTCPServer geschrieben. Android und WinPC verfügen jeweils über einen Server auf einem unterschiedlichen Port und einem Clienten zur Kommunikation mit dem gegenüberliegenden Server. Im lokalen Netz funktioniert das einwandfrei. Da kann ich vom Android zum WinPC und andersherum kommunizieren. Gehe ich aber mit dem Android über mobile Daten ins Netz, dann kann nur noch Android mit WinPC kommunizieren, aber für den PC ist das Androidgerät nicht erreichbar. Versuche ich das mit 2 Androidgeräten (beide mit mobilen Daten im Netz), kommt gar keine Kommunikation zu stande.

Ist das eine Sache der Einstellungen, oder Berechtigungen? Was muss ich anstellen, damit die Kommunikation auch über mobile Daten funktioniert?

mjustin 4. Aug 2023 13:44

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Vermutlich liegt es daran, dass das Android Gerät im "mobile Daten" Netz eine andere IP Adresse als im LAN hat.
Man kann mit ip.me und anderen Webseiten die (momentane) IP Adresse ermitteln.
Quelle: https://www.slashgear.com/950107/the...es-ip-address/

Jedoch: laut https://stackoverflow.com/questions/...ernet-possible ist es ausserdem sehr wahrscheinlich, dass die Netzwerkanbieter nicht den Aufbau von TCP Verbindungen zu einem Gerät erlauben, sondern nur einen vom Gerät ausgehenden Verbindungsaufbau zu einem anderen (externen) Server.

himitsu 4. Aug 2023 14:43

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Hinter der öffentlichen IP können sich auch mehrere Geräte verbergen.

Stell es dir einfach so vor, dass der Internetzugang/Funkmast eine große FritzBox ist und da dann die vielen Geräte (Handy/Tablet/...) in einem Gast-WLAN hängen.
* die Geräte sehen sich untereinander nicht
* und es gibt nur ausgehende Verbindungen, weil ohne Port-Forwarding

mjustin 4. Aug 2023 15:39

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Eine Lösung wäre, dass der Client auf dem Android Gerät nur eine Verbindung zum Server aufbaut, ausgehend ist das ja erlaubt.
Wenn die TCP Verbindung einmal aufgebaut ist, dann ist sie bidirektional, der Server kann auch jederzeit von sich aus Daten zum Gerät senden. Das Android Gerät muss dann nur aus dem Socket lesen, und zwar kontinuierlich. Am einfachsten ist das mit einem Thread.
Gleichzeitig kann das Gerät auch jederzeit auf dem Socket Daten an den Server übertragen.

AndyBo 4. Aug 2023 19:09

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Danke für die Antworten.
Mit Threads habe ich mich bis jetzt noch nicht beschäftigt. Dies ist auch mein erstes Projekt mit TCP. Da werde ich mal suchen ob ich da schöne, leicht verständliche Anleitung finde.
Das würde dann zumindest die Kommunikation zwischen mobile Daten und den PC bzw einem Gerät im heimischen Netz lösen.

himitsu 4. Aug 2023 19:35

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Gab es im Android nicht einen NotificationService, wo man über Android (sobald/solange das Handy online ist) einem Programm etwas schicken kann?

Die dauerhaft offene Verbindung hat ja kleine Probleme, wenn die Verbindung zwischendruch immer mal wieder kurz weg ist.

AndyBo 4. Aug 2023 19:57

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Zitat:

Zitat von himitsu (Beitrag 1525313)
Gab es im Android nicht einen NotificationService, wo man über Android (sobald/solange das Handy online ist) einem Programm etwas schicken kann?

Hört sich auch interessant an. Werde ich mir morgen mal angucken.

mjustin 5. Aug 2023 11:42

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Zitat:

Zitat von AndyBo (Beitrag 1525310)
Danke für die Antworten.
Mit Threads habe ich mich bis jetzt noch nicht beschäftigt. Dies ist auch mein erstes Projekt mit TCP. Da werde ich mal suchen ob ich da schöne, leicht verständliche Anleitung finde.

Ein kleines, eigenständiges Beispiel ist hier:

https://mikejustin.wordpress.com/201...-push-example/

Der Einfachheit halber befinden sich Server und Client in derselben Anwendung. Der Client führt in seinem Thread einfach nur in einer Schleife TCPClient.IOHandler.ReadLn aus und schreibt - falls eine Nachricht eintrifft - deren Text in ein TMemo.

Delphi-Quellcode:
procedure TMyPushClientThread.Execute;
var
  S: string;
begin
  TCPClient.Connect;
 
  while not Terminated do
  begin
    S := TCPClient.IOHandler.ReadLn(IndyTextEncoding_UTF8);
 
    if not TCPClient.IOHandler.ReadLnTimedout then
    begin
      TThread.Queue(nil,
        procedure
        begin
          FLog.Append(S);
        end);
    end;
 
  end;
 
  TCPClient.Disconnect;
end;

AndyBo 6. Aug 2023 10:52

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Danke Dir

In diesem Beispiel bekommt der Client Nachrichten vom Server. Wenn ich jetzt versuche von diesem Clienten was an den Server zu schicken, funktioniert das nicht mehr (Die Verbindung besteht bereits). Wie muss ich mir das vorstellen, das umzusetzen? Brauche ich da einen 2. Clienten, oder sogar eine 2. Server/Client-Struktur? Eine, die nur vom Clienten zum Server sendet und die 2., in der der Client nur vom Server empfängt? Oder denke ich da zu kompliziert?

mjustin 6. Aug 2023 12:37

AW: IndyServer auf Android mit mobilen Daten nicht erreichbar
 
Zitat:

Zitat von AndyBo (Beitrag 1525349)
Wenn ich jetzt versuche von diesem Clienten was an den Server zu schicken, funktioniert das nicht mehr (Die Verbindung besteht bereits). Wie muss ich mir das vorstellen, das umzusetzen?

Das Beispiel zeigt, wie der Server einfach Daten an den Client senden kann. Es fehlt nur eine Kleinigkeit, um über den Client gleichzeitig auch Daten an den Server zu senden: die Erzeugung der Indy TCP Client Instanz muss im Hauptthread stattfinden, z.B. als Feld des Hauptformulars (TServerPushExampleForm), und der TCP Client muss dann über den Konstruktor dem Thread übergeben werden.
Damit ist es möglich, z.B. aus einen Button.OnClick heraus eine Nachricht via TCP Client an den Server zu senden. Der Button sendet dann aus dem Hauptthread, während der TMyPushClientThread weiterhin auf Nachrichten des Servers wartet. Eine Indy TCP Client Instanz erlaubt das gleichzeitige Senden und Empfangen aus verschiedenen Threads (ein Thread je Richtung).


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz