Beiträge von Knimix

    2019-01-25 16:39:56.339 10937-10971/com.tcp.passwordkeeper W/System.err: java.net.SocketException: Socket is closed
    2019-01-25 16:39:56.340 10937-10971/com.tcp.passwordkeeper W/System.err: at java.net.Socket.getOutputStream(Socket.java:970)
    2019-01-25 16:39:56.341 10937-10971/com.tcp.passwordkeeper W/System.err: at com.tcp.passwordkeeper.Connection$2.run(Connection.java:91)
    2019-01-25 16:39:56.341 10937-10971/com.tcp.passwordkeeper W/System.err: at java.lang.Thread.run(Thread.java:764)

    ja das ist ja klar aber ich erstelle einmal eine instaz in der "main" und dann rufe ich einmal connect() auf dann kann ich auch eine nachricht senden mit sendText() aber wenn ich die zweimal die methode bekomme ich ein error das habe ich ja gepostet also ich denke es lieg wieder daran das ich das gleichzeig aufrufe aber wie soll man das machen? Wie soll man in einem Thread checken ob der gleiche Thread zuvor schon fertig ist?

    und wenn ich verbunden bin also ich habe jetzt 2 buttons einen zum verbinden und einem zum senden. Das erste mal geht nachricht kommt auf dem server an aber wenn ich nochmal sende gibt der mir ein Error mein Printwriter


    PrintWriter p = new PrintWriter(socket.getOutputStream());
    p.write(text); <----- Hier
    p.close()

    Ok danke es funktioniert jetzt habe einfach beim senden einen neuen thread gemacht und dort gewartet bis der andere thread fertig ist , das flush habe ich jetzt auch weggelassen funktioniert jetzt!


    Eine frage noch : wenn ich ein thread starte mit Thread t = new Thread(Runnable...) t.start(); und wenn der thread fertig ist würd der dann beenden weil wenn ich mal z.b 2 mal eine verbindung aufbaue das dann nicht 2 threads sind und halt mehr



    MFG knimix

    PrintWriter p = new PrintWriter(socket.getOutputStream());
    p.write(text);
    p.flush(); <----------- Hier
    p.close();



    2019-01-24 22:22:09.768 8698-8698/com.tcp.passwordkeeper E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tcp.passwordkeeper, PID: 8698
    java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24704)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6590)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24704)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6590)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
    Caused by: android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448)
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:108)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)
    at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)
    at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)
    at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)
    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)
    at java.io.BufferedWriter.flush(BufferedWriter.java:254)
    at java.io.PrintWriter.flush(PrintWriter.java:320)
    at com.tcp.passwordkeeper.Connection.send(Connection.java:74)
    at com.tcp.passwordkeeper.MainActivity.onclick(MainActivity.java:29)
    at java.lang.reflect.Method.invoke(Native Method)
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
    at android.view.View.performClick(View.java:6256)
    at android.view.View$PerformClick.run(View.java:24704)
    at android.os.Handler.handleCallback(Handler.java:789)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6590)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

    Wenn ich mit new Connection() einen neuen Socket starte wird die Variable in der Instanz "gespeichert" in der gleichen Instanz rufe ich die Methode connect() auf die den Socket verbindet und dann will ich vom Socket eine nachricht senden wofür ich den Socket brauch der immer noch eigentlich in der Variable ist dass ist er aber nicht und meine frage ist warum

    Wie du hoffentlich siehst gibt es mehre Methoden also den Konstruktor "Connection" und die Methode "connect" mit der Methode connect starte ich ein Thread wo die Variable socket die ja null ist zu einem neuen Socken gemacht wird.Die Methode sendText(String text) sendet ein Text zum Server dafür Brauchs sie die variable Socket die aber immer null ist obwohl die ja in der Methode connect auf den socket gesetzt wird.


    ;