Hallo,
Wenn Dein Ziel-Telefon über Mobile Daten im Internet ist, wird das Vorhaben schwierig, da die IP-Adresse, die Du vom Provider zugewiesen bekommst nicht die ist, mit der Du im Internet unterwegs bist (Carrier-grade NAT). Wenn das Zieltelefon aber hinter einem normalen DSL Router ist, kannst du in dem Router eine Portweiterleitung für einen beliebigen Port, den du für dein Vorhaben definieren müsstest, freigeben und an das hinter dem Router angebundene Handy weiter leiten.
In der App auf dem Ziel-Telefon könntest du dann mit einem ServerSocket Objekt auf eingehende Verbindungen unter dem Port warten:
// erstelle ServerSocket mit dem übergebenen Port
serverSocket = new ServerSocket( port );
while (true) {
// Blockt den aktuellen Thread so lange bis eine eingehende Verbindung kommt
// und liefert ein Socket Objekt zurück
Socket socket = serverSocket.accept();
// Mit Hilfe des Socket Objekts können jetzt Daten aus dem Stream gelesen
// oder in den Stzream geschreiben werden.
}
Alles anzeigen
Das hier ist allerdings stark vereinfacht, aber im Internet gibt es tausende Bespiele dafür, wenn Du nach ServerSocket Implementationen suchst.
In der App auf dem Client-Telefon bräuchtest Du dann nur eine Socket Verbindung zu der Dyn-DNS Adresse des Ziel Routers mit dem definierten Port erstellen:
Als Dyn-DNS Anbieter könnte ich z.B. https://dynv6.com/ empfehlen.
Zusätzlich könntest Du die Verbindung auch noch absichern, in dem Du statt normalen Sockets SSL Sockets (SSLServerSockets und SSLSocket) verwendest.
Ich hoffe ich konnte hiermit etwas weiter helfen.
PS.: Hier noch eine Anleitung für ServerSockets unter Andoid: Android Client-Server Using Sockets – Server Implementation