Beiträge von snipor

    Ich habe dir mal eine PN geschickt.


    Edit:
    Hier mal die Beschreibung


    Meine App hat folgenden Zweck.


    Ich habe hier ein Carambola Wlan Modul, dieses fungiert als WLAN
    Access Point. Das Android Gerät kann sich dann damit verbinden.


    Außerdem dient das Carambola Modul auch als TCP/IP Server,
    es stellt mir einen TCP Socket zur Verfügung.


    Das Android Gerät soll dann eine Socketverbindung zu dem
    Modul aufbauen.


    Den Datenstrom über den Socket leitet das Carambola Modul an
    einen Mikrocontroller via serieller Schnittstelle weiter.


    Die App soll nun also eine Socketverbindung aufbauen, und
    diese dauerhaft offen halten solange die App im Vordergrund ist.


    Über den Socket sollen dann dauerhaft sowohl Befehle von der
    App an das Carambola, als auch vom Carambola zur App geschickt werden können.



    In meinem angefangen Beispiel soll beim Druck auf eine
    Taste dann z.B. der Befehl „EIN“ an das Carambola gesendet werden.


    http://geo-delta.de/sonstiges/AVR-IO-Test.rar

    Hallo,


    danke für das Beispiel.


    Aber komme ich dann nicht wieder in das Problem mit der NetworkinMainThreadExpetion? Es soll ja scheinbar alles was mit Netzwerk zu tun hat in einem extre Thread gemacht werden


    So ganz komme ich noch hinter das Multithreading, und in der Tat habe ich vorher fast nur auf Mikrocontrollern auch in Assembler programmiert, alles sequentiell.


    Ich weiß auch leider nicht wie ich da an die ganze Sache am besten ran gehen soll.


    Ich hatte mir überlegt es generell evtl. so zu machen.


    Ich habe einen Main Thread der für das UI usw zuständig ist und bei Bedarf auch Nachrichten an über die Buffer schicken kann.


    Zunächst starte ich dann bei Bedarf aus dem UI Thread bei Druck auf einen Button einen neuen Thread, in diesem öffne ich nur den Socket.


    Sobald dann der Socket gebunden ist (isBound() ) soll dann ein weiterer Thread aus dem Main Thread aus gestartet werden. In diesem werden dann die Buffer erstellt. Dieser Thread muss dann wohl dauerhaft laufen (Endlosschleife?) und auf Nachrichten vom Server warten.


    Vom Main Thread aus muss ich ja auch auf die Buffer bzw den Socket zugreifen können.



    Was denkst du darüber? Sollte man das so machen, oder anders?



    Eines der Hauptprobleme scheint wohl jetzt zu sein dass ich in den MainThread eine Referenz auf den Socket bringen muss, da ja der Thread für den Socket schnell durchgelaufen ist. Und ansonstne räumt der Garbage Collector ja den Socket auf.



    Wäre das hier richtig um eine Referenz in den MainThread zu haben, so dass die Objekte aus dem AsyncTask nicht vom Garbage Collector gelöscht werden?



    Danke schonmal


    Gruß

    Könntest du mir evtl. ein einfaches Beispiel geben wie ich eine solche Referenz in die MainActivity machen müsste?


    Würde es reichen wenn ich z.B. schreiben würde R= new Insatz() und dann dass R ins Return von doInBackground schreibe?
    Oder wie macht man das am besten?



    Vielen Dank

    Danke für das Beispiel das hat mir schonmal geholfen.


    Aber dennoch möchte ich nochmal auf meine Ausgangsfrage zurückkommen.


    Ich würde sehr gerne wissen was genau mit einer in einem Asynctask erstellten Socketverbindung oder Instanz einer Klasse passiert nachdem der Asynctask durchgelaufen ist.


    Wird das vom Garbage Collector dann einfach aufgeräumt, oder kann ich das noch nutzen?


    Ich habe jetzt die ganze Woche danach gesucht aber eine Erklärung hab ich niergends gefunden.


    Wäre sehr dankbar für eine Antwort oder Link.


    Danke

    Danke für deine Antwort.


    Also ich brauche eine dauerhafte Verbindung.


    Ich bräuchte also wenn ich einen AsyncTask verwenden möchte eine dauerhafte Schleife darin, die solange läuft wie die App aktiv sein soll, oder?


    Wie sollte ich es richtig machen?


    Einen neuen Thread mit runnable? Wie greife ich dann vom GUI Thread auf den Socket bzw. die Buffer zu?


    Danke

    Hallo


    Ich möchte mir eine App erstellen in der ich einen TCP/IP Client integriere.


    Da ich ja die Netzwerksache nicht im Main Thread machen kann habe ich mir die Sache mit Asynctask angeschaut.


    Leider habe ich da große Probleme zu verstehen wie die ganze Sache gehandelt wird.


    Frage1:


    Was passiert wenn ich in der Methode doInBackground(...) eine Klasse instanziere
    z.B. ipcon = new IPConnection();


    Wenn kein weiterer Code in doInBackground steht springt er ja direkt in onPostExecute(...) richtig?


    Was aber passiert nun mit dieser Instanz "ipcon" ? Läuft die im Main Thread, oder läuft die in einem neuen Thread oder ist sie ganz weg weil der AsyncTask bereits abgeschlossen wurde?
    Kann ich auf die Methoden dieser Instanz noch zugreifen?


    Frage2:


    Ich schreibe in doInBackground(...) folgendes
    z.B.


    clientSocket = new Socket("192.168.1.1", 2002);
    in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));


    Es werden ja dann auch nur die Socketverbindung und die 2 Buffer erstellt. Anschließend wird gleich in onPostExecute(...) richtig?


    Was passiert dann mit der Verbindung? Läuft die in einem anderen Thread, oder ist sie weg weil der AsyncTask bereits abgearbeitet wurde?
    Kann ich noch auf die Buffer zugreifen?


    Ich weiß die Fragen sind total blöd, aber ich finde irgendwie keine Erklärung/Antwort weil es wohl zu trivial ist.


    Danke schon mal


    Gruß snipor

    Es ist natürlich \n \r :P Hab mich vertan ;)
    Als Client dient der Code hier aus Beitrag 13. Diesen hab ich einfach mal so übernommen.


    Als Server dient ein WIZFI 630 Modul, welches einfach die Daten von einer seriellen Schnittstelle auf einen TCP Port weitergibt.


    Danke


    snipor

    Der Code hat mir auch sehr geholfen, danke dafür an Alle die beteiligt waren.
    Ich habe bei meiner Anwendung festgestellt dass die Nachricht vom Server nicht sofort am Client angezeigt wird.


    Schickt der Server z.B. folgendes: test/r/n so wird erstmal nichts angezeigt, erst sobald ein weiteres Zeichen geschickt wird erscheint die Meldung am Client.
    Es muss jedoch kein zweites return nach dem Zeichen erfolgen, es reicht wie gesagt ein weiteres beliebiges Zeichen. Kann es sein dass der Bufferinhalt erst übergeben wird sobald er wieder mit neuen Daten befüllt wird?


    Danke


    Gruß snipor