gut habe das jetzt geändert und als info ich werde das bild festlegen also wahr. hochformat
Beiträge von Knimix
-
-
Wie soll ich das den sonst machen?
-
Die Connection klasse : https://pastebin.com/qsSgqfTP
Die Main : https://pastebin.com/7CwUkhcc -
Wo das ausgeführt wird oder die funktionen?
-
Also das ist so das wenn ich den printwriter schließe das dann auch der socket sich schließt kann man das verhindern
-
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?
-
ok, ist es möglich mit einer Verbindung mehrere Nachrichten zum Server senden ohne den Socket zu schließen weil beim 2. steht da das der Socket closed 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
-
ok probiere ich morgen mal aus
-
Connection con = new Connection("localhost",1980);
con.connect();while(con.con.isAlive()){
}
con.send("hallooo");
-
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) -
ok geht ich bekomme jetzt noch ein fehler bei dem Printwriter also bei p.flush
-
gut dann währe meine frage noch wie check man ob ein thread fertig ist?
-
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
-
Aber ich wenn ich die klasse aufrufe und dann die methode wird doch keine neue Instanz erstell sondern es bleibt die gleiche
Connection con = new Connection("localhost",1980);
con.connect();
con.send("hallooo"); -
VOn der main hier der code der ist von einem Button
public void onclick(View view){
Connection con = new Connection("localhost",1980);
con.connect();
con.send("hallooo");
// con.disconnect();}
-
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.
;
-
Hier noch mal ein link zum code : https://pastebin.com/K2kay4gN