[solved] Sockets: Gesendeter Text kommt um eins zu spät
-
Hi an alle,
hab mich heute mal mit java und Sockets beschäftigt. Nur jetzt hab ich das Problem, dass das Gesendete immer eins zu spät angezeigt wird. Beispiel:Server sendet: "Hi"
Client empfängt: Nichts.
Server sendet: "Schönes Wetter, oder?"
Client empfängt: "Hi"
Server sendet: "Hallo?"
Client empfängt: "Schönes Wetter, oder?"Hab schon mit flush etc. rumgespielt, aber war alles nicht so toll... Bin am verzweifeln und somit für jeden Tip dankbar
Hier mein Code, vom Senden und Empfangen. Die GUI hab ich mit swt gemacht:
sockOut=new PrintWriter(echoSocket.getOutputStream(),true); sockIn=new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
Senden: if(sendIpOk.getText().equals("Ja")) { sockOut.flush(); String sText; sText=sendText.getText(); sendText.setText(""); sText=sText.trim(); sockOut.print(sText.toCharArray()); }
Empfangen: try{ if(sockIn!=null) { char[] buffer = new char[200]; int numOfChars=0; numOfChars=sockIn.read(buffer, 0, 200); if(numOfChars>0) { String sbuf = new String(buffer,0,numOfChars); messageText=sbuf; System.out.flush(); System.out.println(sbuf); } } }
-
versuch mal nen flush, nachdem du den string in den stream gedrückt hast.
ausserdem solltest du lesen immer in ne schleife verpacken, die solange liest, bis das ende des streams erreicht ist.
-
Das Lesen is in nem Thread der immer wieder von neuem ausgeführt wird, nachdem er beendet wurde.
EDIT: ES HAT FUNKTIONIERT AAAAAAAAAAAAHHHHHHHHH Nur warum kA ^^ Aber dein Tip war richtig Vielen Dank!
Senden sieht jetzt so aus: (Nur das sockOut.flush(); vom Anfang ans Ende) if(sendIpOk.getText().equals("Ja")) { String sText; sText=sendText.getText(); sendText.setText(""); sText=sText.trim(); sockOut.print(sText.toCharArray()); sockOut.flush(); }