String von Gerät zu Gerät über Netzwerk übergeben - Socket

  • Servus zusammen!


    Ich möchte gerne einen String von einem Gerät zum anderem Gerät verschicken über das Netzwerk. Ich habe die Nacht schon das Internet durchsucht und bin auch auf etwas gestoßen: Socket Programming


    Ich habe dann das Ganze mal nachgebaut aber kommt einfach nicht weiter. Anfangs war es so, dass die ermittelte IP Adresse falsch dargestellt wurde. Das Problem habe ich aber bereits mittels eines Formatter gelöst.


    Nun habe ich gerade noch einmal ein neues Projekt in Eclipse erstellt. In der MainActivity kann man zwischen der ServerActivity und der ClientActivity wählen.


    Da ich gerade nur ein Gerät zur Verfügung habe, hab ich die App einmal auf meinem Note ausgeführt und einmal den Emu. Das Note soll als Server dienen und der Emu als Client.


    Als bin ich auf dem Emu in die ClientActivity hineingegangen und habe die mir ausgegeben IP Adresse von dem Note eingegeben. Allerdings passiert nix. In der LogCat steht nur Connecting... und das wars dann auch schon.


    In der Manifest habe ich als Permission Internet und Acces_Network_State eingetragen.


    Hier mal meine Korrektur zu der Methode getLocalIpAddress() aus dem obigen Beispiel:




    Kann mir da mal jemand helfen? Ich bin auf dem Gebiet komplett neu und weiss nicht wo ich anfangen soll. Oder liegt es an dem Emu?


    Grüße

  • Ich hab mit einem Kollegen auch eine App geschrieben, die Daten über das WLAN senden soll. Mit dem Emulator testen geht/ging jedenfalls nicht. Das ist soweit ich sagen nicht möglich, jedenfalls hab ich keine Lösung dafür gefunden. Der Emulator teilt sich zwar die Internetverbindung mit dem Host, aber sobald man irgendwas mit WLAN machen will gehts nicht. Musst wohl oder übel ein weiteres Gerät finden.


    Aber vllt weiß ja doch noch jemand mehr.


    block_

  • Hi,


    ich sollte auch eine App entwickeln, die über TCP kommuniziert. Am Anfang hatte ich immer das Problem, dass sie sich aufgehängte. Das wiederrum liegt daran, dass die Android UI es nicht erlaubt Netzwerkanfragen über den Main-Thread laufen zu lassen.
    Dies umgeht man mit einem Thread, über den es aber sehr umständlich ist, die UI in Echtzeit zu ändern. Eine einfachere Lösung ist der AsyncTask, mit diesem kann man sehr gut die UI manipulieren.
    Desweiteren hab ich meinen Socket mit putty getestet. Davor erstmal Putty runterladen und mit dem Emulator verbinden. Bei mir wars localhost über den Port 5554. Danach bist du mit dem emulator verbunden und nun kannst du eine Redirection einrichten. Ich z.B. hab Port 8888 gewählt.
    Somit musst du über Putty an den Emulator den Befehl:
    redir add tcp:8888:8888
    schicken.
    Danach kannst du dich mit Putty über localhost:8888 auf den Socket zugreifen und schreiben was das Zeug hält.


    Ich muss dazu sagen, dass bei mir die App der Server, bzw. derjenige ist, der am port 8888 lauscht ;)



    Viele Grüße :)

  • Hallo zusammen.


    Ich hatte gerade noch einmal Zeit um das noch einmal zu testen. Was ich nun hinbekommen habe, ist die Kommunikation zwischen zwei Emus.


    Dazu habe ich folgende Codes verwendet:


    ServerActivity:




    und die ClientActivity:



    Dann habe ich über die Console folgendes eingegeben:


    telnet localhost 5554
    redir add tcp:5000:6000



    Mein Emu mit 5554 war der Server und mein Emu mit 5556 war der Client. Konnte dann vom Client eine Nachricht an den Server schicken.


    Das alles ist ja ganz schön...nun möchte ich natürlich eine Kommunikation zwischen 2 Android Devices herstellen.


    Auch ist mir aufgefallen, dass die serverIpAdress mit 10.0.2.2 angegeben wird. Lese ich aber die IP von den Emus aus, so erhalte ich jeweils 132.163.18.0


    Ich bin einfach zu lange aus dem Thema Netzwerk raus.


    Wenn ich die App nu vom Note aus starten will und ich rufe dort die ClientActivity auf, so schmiert mir die App mit einer NetworkOnMainThreadException ab.


    Wenn ich diesen Code nun dazu verwenden will um einen String zwischen zwei realen Geräten auszutauschen muss ich dann


    1. Muss ich hier den REDIRECTED_SERVERPORT und SERVERPORT auf 8888 ändern?









    2. Auf dem Server mittels



    die IP auslesen, und diese dann in der ClientActivity eingeben?


    Oder bin ich total auf dem Holzweg?


    Ich hatte hier auch noch ein Bsp. gefunden, welches aber bei mir nicht funktioniert hat: http://thinkandroid.wordpress.…g-into-your-applications/


    Hat jemand eine Idee wie ich das Lösen kann?


    EDIT: Ich habe hier http://de.wikibooks.org/wiki/Googles_Android/_TCP-Sockets auch nochmal eine nette Adresse gefunden. Was ich bisher herausfinden konnte ist, dass die Emus in einer eigenen Netzwerkumgebung arbeiten, daher auch das Problem zwischen einem realen Gerät und einer Emu zu kommunizieren.


    Ich habe bereits meine ServerActivity und meine ClientActivity ein wenig angepasst, so dass ich nun auch eine IP auf Seiten des Clients eingeben kann die mir nun auf Seiten der ServerActivity in einer TextView ausgegeben wird.


    Kann ich eigentlich, wenn ich die ServerActivity auf meinem Note laufen lassen, das Note dann irgendwie anpingen? Nur mal so eine Idee....



    EDIT 2:


    Ok, ich bin einen kleinen Schritt weiter. Ich kann mittlerweile einen String vom Emu zu meinem Note verschicken. Mit der getLocalIpAddress() Methode allerdings komme ich nicht weiter. Diese gibt mir zb gerade die IP 63.252.252.134 aus obwohl ich im Netzwerk mit 192.168.2.107 registriert bin. Gebe ich die 192.168.2.107 im Emu an, so kann ich auch einen String an den Server, also an das Note schicken. Wenn jetzt aber die IP aus der getLocalIpAddress() schon falsch ist, wie bekomme ich es dann hin, die korrekte IP zu bekommen? Vor allem, wenn ich nicht mal eben im Router nachsehen kann.


    An die WiFi IP komme ich ggf. ja so:



    Nur habe ich noch Probleme an die externe zu kommen, also wenn WiFi aus ist. Ich habe zwar gesehen, dass einige so Dienste wie whatistmyip.org usw. verwenden, aber damit hatte ich auch noch keinen Erfolg.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!