WinFuture-Forum.de: Problem Beim Versenden Von Dateien Via Dataoutputstream In Java - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Problem Beim Versenden Von Dateien Via Dataoutputstream In Java


#1 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 04. Dezember 2007 - 17:53

Hi,
ich beschäftige mich seit ca 2 Wochen mit Java und bastel derzeit an einem kleinem Dateiverwaltungsprogramm rum.

Ein Server kann mehrere Clients verwalten etc.

Ich bin gerade dabei, die Dateikübertragung von Server zu Clien un dumgekehrt zu implementieren stehe jedoch vor einem Problem =/

Zur Zeit versuche ich die Sache beim Clienten folgendermasen zu realisieren:

		File fil = new File(read.readLine());
		InputStream iput = new FileInputStream(fil);
		byte buffa[] = new byte[(int)fil.length()];
		out.writeUTF(fil.getName());
		out.writeInt((int)fil.length());
		iput.read(buffa);
		
		for ( int i =0; i < buffa.length; i++)
		{
			out.writeByte(buffa[i]);
			System.out.println(i);
		}


und der Server empfängt wie folgt:

int pos =0;
		String name = in.readUTF();
		int size = in.readInt();
		byte buffa[] = new byte[size];
		while(in.available()>0)
		{
			buffa[pos] = in.readByte();
			pos++;
		}
		OutputStream oput = new FileOutputStream(name);
		oput.write(buffa);
		oput.close();


Allerdings bricht die Übertragung kurz nach dem Anfang an immer anderen Stellen ab.
ALso immer bei einem anderen Byte welches übertragen wird.

Exception in thread "main" java.net.SocketException: Connection reset
		at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
		at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
		at java.io.DataOutputStream.writeByte(DataOutputStream.java:136)
		at client.main.Main.main(Main.java:29)


bekomm ich als Fehlermeldung.

Ich habs mit Textdateien probiert sowie mit Videos/Musik.

Manchma bekomm er ein ganzes MB durchgeschickt manchmal aber auch nur ein paar Byte =/

Könnt ihr mir sagen woran das liegt?
Ich ahbe schon gesucht aber nichts wirkliches brauchbares gefunden für mein Problem

Wenn der Code nicht sehr schön is, bitte ich um Entschuldigung aber er wird so auch nicht 1:1 übernommen, ich wollte nur einmal testen wie sich die ganze Sache am besten implementieren lässt.

Ich hoffe ich seh den Wald vor lauter Bäumen nicht

greetz skelle
0

Anzeige



#2 Mitglied ist offline   G.I.Joe 

  • Gruppe: aktive Mitglieder
  • Beiträge: 978
  • Beigetreten: 19. September 04
  • Reputation: 0

geschrieben 04. Dezember 2007 - 19:18

Zum einen könntest du versuchen serialisierte Objekte zu verschicken, das ist um Längen besser als dieses String-Gefriemel. Falls du bei deiner Lösung bleiben willst, solltest du die Daten vorher Base64 kodieren, Java bringt dazu netterweise inzwischen sogar eine Klasse mit.
Eingefügtes Bild Eingefügtes Bild
0

#3 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 04. Dezember 2007 - 19:36

Also die Codierung in Base64 bringt alleine leider noch keinen Erfolg, das dachte ich mir aber auch da die Übertragungsart ja gleich bleibt =/
0

#4 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 04. Dezember 2007 - 20:09

Ok durch das verwenden eines ObjectOutputStreams, welcher das Serialisieren in die Tat umsetzt wenn ichs richtig verstanden hab, geht die Sache jetz

danke ;)
0

#5 Mitglied ist offline   Nighthawk 

  • Gruppe: aktive Mitglieder
  • Beiträge: 73
  • Beigetreten: 28. Dezember 03
  • Reputation: 0
  • Wohnort:CH

geschrieben 06. Dezember 2007 - 00:38

Stichwort: flush()
0

#6 Mitglied ist offline   skelle 

  • Gruppe: aktive Mitglieder
  • Beiträge: 793
  • Beigetreten: 15. Juli 04
  • Reputation: 0

geschrieben 06. Dezember 2007 - 06:08

flush schreibt doch "nur" zwangsweise die Daten die noch im Buffer sind in den Stream oder?
Also sollte es die Verbindungsabbrüchen nicht unbedingt verhindern oder? (kann auch sein das ich falsch liege stecke ja noch nich soo tief in der Materie)
Wie oft und an welchen Stellen sollte man flush denn aufrufen?
0

#7 Mitglied ist offline   G.I.Joe 

  • Gruppe: aktive Mitglieder
  • Beiträge: 978
  • Beigetreten: 19. September 04
  • Reputation: 0

geschrieben 06. Dezember 2007 - 07:00

flush() sollte am Ende eines Sende- bzw. Schreibvorgangs aufgerufen werden, zwischendurch manuell flush() aufzurufen ist ziemlich sinnfrei.
Eingefügtes Bild Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0