# Problem Client - Server Sockets: .ready() wird nie true!



## majestic (11. Mrz 2012)

Hallo,

Ich versuche schon seit Stunden eine Client - Server kommunikation zum laufen zu bringen,  habe aber das Problem das beim Client BufferedReader.ready() nie true wird!

Hier der Client:


```
conn = new Socket(SERVER_IP, SERVER_PORT);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(conn.getOutputStream()));
writer.print("sid/"+data+"\n");
writer.flush();

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while(!reader.ready()) Thread.sleep(2); <----- reader.ready() wird nie true!
String retvalue = reader.readLine();
System.out.println("Daten erhalten: "+retvalue);
writer.close();
reader.close();
conn.close();
return retvalue;
```

und hier der Server:


```
ServerSocket serverS = new ServerSocket(1080);
while (true) {
reqSocket = serverS.accept();
this.start();
}
[...]
In der run Methode der gleichen Klasse:
bReader = new BufferedReader(new InputStreamReader(reqSocket.getInputStream()));
while (!bReader.ready()) {
System.out.println("Reader ready:"+bReader.ready());
try {
      Thread.sleep(2);
 }
 catch (InterruptedException ex) {
       System.out.println("interrup exception in ReqServer!");
  }
 }
clientData = bReader.readLine();
OutputStream os = reqSocket.getOutputStream();
BufferedWriter bWriter = new BufferedWriter(new OutputStreamWriter(reqSocket.getOutputStream()));
bWriter.write(data);
bWriter.flush();
bWriter.close();
bWriter = null;
reqSocket.close();
```


----------



## majestic (11. Mrz 2012)

ok hat sich von selbst erledigt ..


----------



## irgendjemand (11. Mrz 2012)

darf man mal fragen was du da überhaupt vor hast und was nun des rätzels lösung war ?

auch ist deine mischung gut ... auf der einen seiten PrintWriter ... und auf der anderen BufferedWriter ...
wird zwar beides über einen OutputStreamWriter gelegt ... aber entscheid dich mal ...

auch ist die verwendung von ready() fragwürdig ...

normalerweise liest man in nem endlos loop vom BufferedReader


```
String line="";
while((line=bufferedReader.readLine())!=null)
{
//verarbeitung
}
```

setzt natürlich a-sync threads vorraus ...


----------



## majestic (12. Mrz 2012)

Ich dachte wenn ich mit den Readern und Writern etwas aufräume klappts und hab hier etwas voreilig gepostet. Es hat aber immer noch nicht funktioniert, dann habe ich deinen Post gelesen und nun funktioniert es. Dank dir!


----------



## irgendjemand (12. Mrz 2012)

sind eigentlich basics die man so auch in jedem besseren buch findet *tipp : java insel* ...

ready sollte man gerade übers netz nicht verwenden ... im lokalen file-system *kann* es aber bestimmt irgendeinen sinnvollen einsatz gaben *auch wenn mir grad nichts einfällt*


----------



## majestic (16. Mrz 2012)

Wäre mal interessant wann diese Method überhaupt true zurück gibt...


----------



## irgendjemand (16. Mrz 2012)

[japi]BufferedReader[/japi]


			
				API-DOC hat gesagt.:
			
		

> public boolean ready()
> True if the next read() is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block.



wer lesen kann ist klar im vorteil


----------

