Socket von Tablet (Android) nach Rasberry (Pyhon)

  • Python

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von NoIde.

    Socket von Tablet (Android) nach Rasberry (Pyhon)

    Hallo zusammen

    Server:
    Rasberry pi mit Python

    Client:
    Tablet mit Android
    Ich mochte gerne von Tablet (Android) nach Rasberry (Python) mich mit Socket verbinden.

    Leider kommt beim Raberry keine Daten an.

    Frage: Warum baut Socket keine Verbindung per Wlan auf.
    Tablet und Rasberry sind im selber Wlan.

    Quellcode

    1. try {
    2. Socket clint = new Socket("192.168.1.3", 1337);
    3. PrintWriter printWriter = new PrintWriter(clint.getOutputStream());
    4. printWriter.write("Alles wird gut - LOL!!!");
    5. printWriter.flush();
    6. printWriter.close();
    7. clint.close();
    8. } catch (IOException e) {
    9. e.printStackTrace();
    10. }


    Quellcode

    1. import socket
    2. server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    3. server_socket.bind(("0.0.0.0" , 1337))
    4. server_socket.listen(1)
    5. while True:
    6. (client_socket, addr) = server_socket.accept()
    7. print(client_socket.recv(1024))


    Ich bekomme eine Fehler Meldung von Android:

    10-14 09:47:40.030
    10327-10327/com.example.ich.myapplicationsocket D/AndroidRuntime: Shutting down
    VM

    10-14 09:47:40.040
    10327-10327/com.example.ich.myapplicationsocket E/AndroidRuntime: FATAL
    EXCEPTION: main

    Process:
    com.example.ich.myapplicationsocket, PID: 10327

    android.os.NetworkOnMainThreadException

    at
    android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)

    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)

    at libcore.io.IoBridge.connectErrno(IoBridge.java:137)

    at
    libcore.io.IoBridge.connect(IoBridge.java:122)

    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)

    at
    java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163)

    at java.net.Socket.startupSocket(Socket.java:590)

    at
    java.net.Socket.tryAllAddresses(Socket.java:128)

    at java.net.Socket.<init>(Socket.java:178)

    at java.net.Socket.<init>(Socket.java:150)

    at com.example.ich.myapplicationsocket.MainActivitySocket$2.onClick(MainActivitySocket.java:47)

    at android.view.View.performClick(View.java:4756)

    at
    android.view.View$PerformClick.run(View.java:19749)

    at android.os.Handler.handleCallback(Handler.java:739)

    at
    android.os.Handler.dispatchMessage(Handler.java:95)

    at android.os.Looper.loop(Looper.java:135)

    at
    android.app.ActivityThread.main(ActivityThread.java:5219)

    at java.lang.reflect.Method.invoke(Native Method)

    at java.lang.reflect.Method.invoke(Method.java:372)

    at
    com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)

    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

    Danke für die Antwort
    Wenn du Verbindungen Netzwerk/Internet nutzt, darf du das nicht im MainThread machen.
    android.os.NetworkOnMainThreadException




    Nutze einen AsyncTask, so funktionert das:

    Java-Quellcode

    1. import java.io.BufferedReader;
    2. import java.io.IOException;
    3. import java.io.InputStream;
    4. import java.io.InputStreamReader;
    5. import org.apache.http.HttpResponse;
    6. import org.apache.http.client.HttpClient;
    7. import org.apache.http.client.methods.HttpGet;
    8. import org.apache.http.impl.client.DefaultHttpClient;
    9. import android.os.AsyncTask;
    10. public class AsyncLoader extends AsyncTask<String, Void, String> {
    11. private DownloadCompleteListener dcl = null;
    12. @Override
    13. protected String doInBackground(String... params) {
    14. String response = download(params[0]);
    15. return response;
    16. }
    17. private String download(String url) {
    18. String text = "";
    19. String line;
    20. try {
    21. HttpClient client = new DefaultHttpClient();
    22. HttpGet get = new HttpGet(url);
    23. HttpResponse response = client.execute(get);
    24. InputStream in = response.getEntity().getContent();
    25. BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    26. while ((line = reader.readLine()) != null) {
    27. text += line;
    28. }
    29. return text;
    30. } catch (IOException io) {
    31. return "Downloadfehler";
    32. }
    33. }
    34. public interface DownloadCompleteListener {
    35. void onDownloadComplete(String result);
    36. }
    37. public AsyncLoader(DownloadCompleteListener dcl) {
    38. this.dcl = dcl;
    39. }
    40. @Override
    41. protected void onPostExecute(String result) {
    42. dcl.onDownloadComplete(result);
    43. }
    44. }



    Zu nutzen so:

    Java-Quellcode

    1. private void downloadString(String url) {
    2. AsyncLoader.DownloadCompleteListener dcl = new AsyncLoader.DownloadCompleteListener() {
    3. @Override
    4. public void onDownloadComplete(String result) {
    5. //result verarbeiten
    6. }
    7. };
    8. AsyncLoaderloader = new AsyncLoader(dcl);
    9. loader.execute(url);
    10. }
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin