1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Client-Server Netzwerkverbindung

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von tobbbbi, 19.01.2011.

  1. tobbbbi, 19.01.2011 #1
    tobbbbi

    tobbbbi Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    3
    Registriert seit:
    06.01.2011
    Hallo!

    Ich möchte gerne eine einfache Client-Server Verbindung von meinem Android Handy zum Computer über WLan aufbauen.
    Dabei ist das Handy der Client und der PC der Server.

    Der Rechner hängt per LAN Kabel an einem WLan Router und die Kommunikation mit einem Laptop-Client klappt ohne Probleme.

    Nun habe ich einfach mal den Code des Laptop-Clients in die Android-App übernommen. Leider findet er aber die IP des Servers nicht (ist übrigens über den Rechnernamen aufgelöst).
    Wie muss ich nun vorgehen, dass es funktioniert? Muss ich irgendwelche bestimmten Berechtigungen im Manifest setzen?
    Klappt das mit dem WLan-Zugriff automatisch oder muss ich da noch etwas instanziieren und abfragen?

    Ich bin für jede Hilfe dankbar!

    Gruß
    Tobias
     
  2. afroasiate, 19.01.2011 #2
    afroasiate

    afroasiate Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    1
    Registriert seit:
    11.11.2010
    Probier mal die IP und nicht den Rechnernamen.

    In die Manifest Datei muss folgender Eintrag:

    Code:
        <uses-permission android:name="android.permission.INTERNET" />
    

    Ohne den Eintrag geht nichts.
     
    tobbbbi bedankt sich.
  3. tobbbbi, 19.01.2011 #3
    tobbbbi

    tobbbbi Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    3
    Registriert seit:
    06.01.2011
    Vielen Dank erstmal für deine Antwort!

    Hab es mit direkter IP und der Permission probiert. Kommt leider..."Access Denied" als Exception Message beim Versuch den Socket aufzubauen.

    Code:
    socket = new Socket("192.168.178.21", 3145)
    Die gleiche Portnummer hat natürlich auch der ServerSocket des Rechners(Server).

    Seltsamerweise klappt es aber auch nicht, wenn ich mit dem Laptop via direkter IP verbinden will (connection refused...)
    Trage ich den Rechnernamen wieder ein, geht es...

    Woran könnte es liegen, dass es nicht geht? Ist es evtl. die falsche IP oder Port?
     
  4. tobbbbi, 19.01.2011 #4
    tobbbbi

    tobbbbi Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    3
    Registriert seit:
    06.01.2011
    Unglaublich, jetzt geht's! :w00t00:

    Es war schlichtweg nicht die richtige IP, ich hatte sie falsch ausgelesen.

    Find ich echt toll, wie einfach das funktioniert und ich danke dir nochmal sehr. Du hast mir echt geholfen.

    Nun frag ich mich noch, wie ich über den Hostname anstatt IP kommunizieren könnte, damit ich dynamisch bleibe? Wieso kann er über den Laptop den Hostname auflösen und von Android aus nicht?
     
  5. tobbbbi, 20.01.2011 #5
    tobbbbi

    tobbbbi Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    3
    Registriert seit:
    06.01.2011
    Könnte bitte jemand noch meine Frage beantworten? Kann man denn von Android aus nicht über den Host-Name nen Socket erstellen?
     
  6. tobbbbi, 23.01.2011 #6
    tobbbbi

    tobbbbi Threadstarter Junior Mitglied

    Beiträge:
    27
    Erhaltene Danke:
    3
    Registriert seit:
    06.01.2011
    Nochmal die Frage, ob es möglich ist (wenn nein, warum nicht?) den Socket auch per Hostname zu erstellen?

    Außerdem würde mich interessieren, ob es sehr aufwendig ist eine
    Client-Server-Client Architektur zu erstellen.

    Konkret: Ich möchte mit dem Android-Smartphone Daten an einen Server senden, der immer aktiv ist und auf Clientanfragen wartet.
    Der Server verwaltet weiterhin eine Datenbank, in der die Daten abgelegt und verwaltet werden.
    Weiterhin gibt es noch einen Client, der die Daten vom Server abruft, auswertet und aufbereitet darstellt.
    Es kann ja nun auftreten, dass sich beide Clients gleichzeitig "anmelden" wollen.
    Der eine will seine Daten loswerden und der Server muss sie dann in die Datenbank speichern - der andere will die Daten abrufen und damit aus der Datenbank ziehen.
    Ist es nun schwierig mehrere Clientanfragen zu bearbeiten und wie ist das mit den Datenbankzugriffen gelöst? Muss ich mich darum kümmen oder läuft das automatisch, wer was zuerst kriegt?

    Danke für eure Hilfe.
     
  7. Zoopa, 24.01.2011 #7
    Zoopa

    Zoopa Android-Experte

    Beiträge:
    599
    Erhaltene Danke:
    173
    Registriert seit:
    28.07.2010
    also wenn dein Android einen gültigen Hostnamen hat, sollte das ohne Probleme funktionieren. Das Problem könnte sein (hab ich mal irgendwo gelesen), dass im Standard-Android Hostnamen ein _ vorkommt oder der Hostname evtl zu lang ist und so nicht überall akzeptiert wird.

    Zu Client-Server:
    Der Server erstellt für jede akzeptierte Connection einen Thread, der dann den Client abarbeitet, so kannst du theoretisch beliebig viele Clients gleichzeitig verwalten.
    Die Datenbank verwaltet dann die Anfragen selber, da musst du dich eigentlich nicht drum kümmern.

    (Je nach Isolation Level und parallel laufenden Transaktionen könnte es sein, dass zum Teil falsche Daten gelesen / geschrieben werden, aber ich glaube, standardmässig ist auf den Datenbanksystemen das höchstmögliche Isolation Level gewählt, so dass soetwas nicht passieren kann (auf Kosten der Performance, die aber bei kleinen Systemen kein Problem darstellen sollte).

    Weitere Infos dazu: Transaktion und Isolation
     

Diese Seite empfehlen