# Strings per Schleife zum Client senden



## downandout (17. Okt 2011)

Server (TCP/IP) lest aus Textdatei aus und diese Textdatei hat mehrere Zeilen.

```
OutputStream s1out = s1.getOutputStream();
	DataOutputStream dos = new DataOutputStream(s1out);

try {
		BufferedReader in = new BufferedReader(new FileReader("text.txt"));
			String zeile = null;
			while ((zeile = in.readLine()) != null) {
				dos.writeUTF(zeile);
			}
			break;
		} catch (IOException e) {
			e.printStackTrace();}
```

Der Client sollte dann alle Datein, die ihm geschickt werden ausgeben.


```
InputStream s1In = s1.getInputStream();
		DataInputStream dis = new DataInputStream(s1In);

		String str = new String(dis.readUTF());
		System.out.println(str);
```

Doch leider habe ich keine Ahnung wie ich dis.readUTF() in eine Schleife beim Client stecken kann, sodass er alle Daten bekommt die der Server ihm sendet...
In diesem Fall bekommt und verarbeitet er eben nur den ersten Datensatz.

Wie löst man generell diese Art von Problem?

Vielen Dank für jede Hilfe!


----------



## SlaterB (17. Okt 2011)

mit etwa denselben Schleifen Code wie du schon im ersten Block Zeile 7-10 hast?

readUTF() liefert übrigens schon einen String, ist new String() nötig?


----------



## downandout (17. Okt 2011)

SlaterB hat gesagt.:


> mit etwa denselben Schleifen Code wie du schon im ersten Block Zeile 7-10 hast?
> 
> readUTF() liefert übrigens schon einen String, ist new String() nötig?



kannst du mir schreiben wie die aussehen soll?


```
while ((zeile = in.readLine()) != null) {
```

die Bedingung funktioniert doch nur beim Server, da dieser auf die gespeicherten Daten zugreift.

Der Client weiß ja nicht wieviele Zeilen die Datei hat, die der Server ihm sendet.


----------



## SlaterB (17. Okt 2011)

inwiefern funktioniert es denn nicht, weil am Ende der letzte Aufruf blockiert statt null zurückzugeben?
falls der Server die Verbindung beendet ginge das,

eine Alternative dürfte sein, vorher die Anzahl zu schicken,
mit DataInputStream nicht unbedingt schwierig, aber vielleicht weiß der Server sie auch nicht, 

der könnte dann zum Abschluss noch einen String "[ENDE]" schicken,
falls der Client diesen liest hört er die aktuelle Schleife auch auf

allgemein wenn kein Protokoll festgelegt ist, dann muss der Client wohl lesen bis blockiert,
da sehe ich keinen Ausweg, können ja noch mehr Threads nebenbei weiterarbeiten,
aber falls danach je andere Daten als Strings folgen ist das sicher nicht so schön


----------



## downandout (17. Okt 2011)

Die Bedingung hat doch funktioniert!

```
String zeile = null;
		try{
		while ((zeile = dis.readUTF()) != null) {
		System.out.println(zeile);}}
		catch (EOFException e){}
```

Naja vielen dank, auch für die Denkanstöße!


----------

