# Socket server auf Smartphone



## Deltaforce (19. Nov 2014)

Hi, ich will eine verbindung zwischen PC und Android Smartphone via Sockets herstellen. Es funktioniert auch alles im Lokalen netzwerk, aber wenn ich es mit den "Richtigen" IPv4 adresse (außerhalb des lokalen netzwerkes) mache, geht es nicht. Im Wlan könnte man das Im Router einstellen, aber wie mache ich das im Mobilen netz? Wie kann ich den Port auf dem Smartphone forwarden? Oder gibt es da andere lösungen? Hier der code vom Server:

Code:

```
public void StartThread(){
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while(true){
                try {
                    System.out.println("Starting Server");
                    server = new ServerSocket(8080);
                    System.out.println("Waiting for Connection");

                    s = server.accept();
                    System.out.println("Client connected");

                    while(true){
                        if(!s.isConnected()){
                            connected = false;
                            break;
                        }else{
                            connected = true;
                        }
                        if(!input.equals("null")) {
                            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

                            out.write(input);
                            out.newLine();
                            out.flush();
                            input = "null";
                        }else{
                            try{
                                Thread.sleep(50);
                            }catch (Exception e){System.out.println(e.toString());}
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    System.out.println(e.toString());
                }


            }
        }
    });
    t.start();
}
```
Wenn ich versuche mich mit dem Client zu verbinden geht es nicht, da er den host nicht findet. 
LG Deltaforce


----------



## JavaMeister (19. Nov 2014)

Du brächtest Theoretisch einen Dienst, der die IP des Mobiles kennt. Und bei jeder Änderung entsprechend informiert wird.

Aber besser wäre es die konventionellen Methoden zu nutzen.


----------



## smer4 (21. Nov 2014)

Äusseren IP-Adressen kannst du nachschauen mit "get my ip" Seiter oder so. Dann benötigst du ein festes Server so dass ein Smartfon die Änderungen über seine äussere IP da meldet und der andere Kommunikationsgerät von dem Server eine Meldung bekommt und die Verbindung wird wiederhergestellt. Eigentlich ist es kein Java Socket sondern Layer 3 Problem (in TCP sollte man diese einbauen).


----------



## JavaMeister (21. Nov 2014)

Man sollte schlicht und ergreifend den Push dienst Nutzen und nicht sowas. Der Ansatz ist für mobiles falsch.


----------



## smer4 (21. Nov 2014)

> Push dienst


er meinte doch bidirektionale Verbindung oder?


----------



## JavaMeister (21. Nov 2014)

Selbst wenn er das meinte, sehe ich gerade keinen Widerspruch zu meiner Antwort.


----------



## smer4 (21. Nov 2014)

@
JavaMeister, beschreib dann detailierter den Ablauf


----------



## JavaMeister (21. Nov 2014)

Dachte es wäre klar 

Der Push dienst, der via Framework von Apple und android und bestimmt auch für die sonstigen mobilen os enthalten ist, kann dazu genutzt werden, um dem mobilen Gerät zu sagen; Hey brauche eine bidirektionale Verbindung. 

Der anfragende Host und alle Informationen könne via json übertragen werden.

Details hängen vom konkreten Problem ab. Aber in der mobilen Welt ist das das Mittel der Wahl.


----------



## smer4 (21. Nov 2014)

Nah, der Ablauf wurde damit nicht beschriben))), 
nur dass dieses in spezielle API's für Smartfone (kein Java Sockets) und realisiert durch OS und Unterstützung von Mobilnetz?


----------



## JavaMeister (21. Nov 2014)

Bei konkreten Problemen kann man sicher ausarbeiten. Aber denke man muss dazu auch das notwendige Netzwerk grundlagenwissen haben und auch bereit sein sich damit auseinander zu setzen. Momentan sehe ich das nicht.


----------

