# dateien übertragen, probleme mit versch. Strömen?



## muuh (6. Jan 2007)

Teil des Server-Codes:

```
bout = new BufferedOutputStream(socket.getOutputStream()); 
for (int i=0; i<countGamesToDownload; i++)
				    {
				    	filename=System.getProperty("user.dir")+"\\"+ gamesToDownload.get(i)+".zip";
				    	System.out.println("Filename: " + filename);
				    	bin = new BufferedInputStream(new FileInputStream(filename));
				    	int len = 0;
				    	
				    	int filesize = (int) new File(filename).length();
				    	byte[] buffer = new byte[filesize];
				    	len = bin.read(buffer);
				    	bout.write(buffer, 0, len);
				    	bout.flush();
				    }
```

Teil des Client-Codes:

```
bin = new BufferedInputStream(socket.getInputStream()); 
for (GameInfo gi : gamesToDownloadVec)
				{
						System.out.println(gi.getName());
					      bout = new BufferedOutputStream(new FileOutputStream(new File("C:\\Temp\\" +gi.getName()+".zip")));
					      int bytesRead = 0;
					     
					      bytesRead = bin.read(buffer);
					      bout.write(buffer, 0, bytesRead);
					      System.out.println(bytesRead);
					      bout.flush();
					      bout.close();
					}
```

ich verwende in beiden Programmen auch noch andere Ströme, wie bufferedReader/Writer und ObjectInput/OutputStream...

Wenn ich jetz in dem Vector den ich in der for-schleife durchlaufe nur ein element habe, funktioniert alles...
Wenn ich zwei drinnen habe, dann schaut es für mich beim debuggen so aus, als würde der server beide dateien gleichzeitig senden und nicht warten, bis sich der client die erste datei abholt...

Könnte das daran liegen, dass ich mehrer Ströme verwende?
Wie kann ich den Fehler beheben?

Bitte um Hilfe...


----------



## Beni (6. Jan 2007)

Ein Stream ist einfach eine Folge von bytes, _nicht mehr_. "write( buffer, 0, len)" schreibt einfach ein paar bytes mehr, aber der Stream interessiert sich nicht dafür, wieviele bytes jetzt da wirklich kommen. Vorallem speichert er das nicht.

Hingegen liest "read" soviele bytes, wie es halt gerade gibt (was natürlich auch viel weniger als die Länge des übergebenen Buffers sein kann...). Read weiss nichtmal, dass "write" mit einem Buffer aufgerufen wurde, geschweige denn, dass es genau x bytes lesen müsste.

Du musst hier schon ein bisschen Meta-Information in den Stream einbauen. z.B. jeweils zuerst die Länge der Datei übertragen (ein int kann man praktischerweise in 4 bytes kodieren). Und das read muss in einer Schleife sein, sonst liest du evtl. zuwenig aus dem Stream.


----------



## muuh (6. Jan 2007)

danke!
Es funktioniert jetz! Is ja eigentlich eh logisch, hab ihm jetz vorher noch die filesize übergeben und so viele bytes liest er dann ein und es klappt wunderbar...

vielen dank!


----------



## muuh (6. Jan 2007)

ich kann das thema leider nicht abhaken, sehe den button nicht...
liegt das daran, dass ich nicht registriert bin??

hab mir auch schon brav diesen link angesehn, hat aber nichts gebracht...
http://www.java-forum.org/de/viewtopic.php?p=100794#100794


----------



## muuh (6. Jan 2007)

Doch noch nicht schließen!

Ich glaub das war ein Zufall, dass es geklappt hat, weil jetz gehts nicht mehr....

Ich bin leider nicht so bewandert mit dem thema wie viele bytes ein integer hat...

kann mir vielleicht wer sagen, wie ich einen int als byte schicke bzw. das auf der andern seite wieder entschlüssle


----------

