Datei per Netzwerk senden

Status
Nicht offen für weitere Antworten.

Akrillo

Mitglied
Hallo Leute,

ich habe ein kleines Problem mit dem versenden von *.wav Dateien.
Wenn ich kleine Dateien(ca 19 kb) sende kommen Sie in richtiger größe an und ich kann die kopierte Version auch abspielen.
Falls ich eine große Datei(meine testdateien waren ca. 43 MB und 2 MB groß) kommt sie viel größer an ( Bei mir war die Kopie ca 83 MB und 3,3 MB groß)

Die Daten werden ganz normal über Socket und TCP übertragen.

Hier mal mein Code Schnipsel:
Sender:
Java:
 FileInputStream inputStream = new FileInputStream(musikDatei);
             int len = 0;
             byte[] buffer = new byte[16384];
             
			
			//Sende Signal damit client weiß dass eine Datei übertragen wird
			out.println(musikDateiSignal);
			
			while ((len = inputStream.read(buffer)) > 0) {
                out.write(buffer, 0, len);
                System.out.println(buffer);
            }
			out.println('\0');
			out.println(musikDateiSignal);
		    System.out.println(clientIP + ": Musik - " + "sended");
		    out.println("Lied ist nun zuende...");
		    out.flush();

Empfänger:

Java:
						System.out.println("Empfange Datei..."); //TODO rausnehmen  
//			            OutputStream datei = new FileOutputStream(file);
			            BufferedWriter datei = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( "/home/akrillo/Downloads/webradio.wav" ) ) );

						while( (((msg = in.readLine()) != null)) && !msg.equals(musikDateiSignal))
						{
							datei.write(msg);
						}
				        System.out.println("Fetching complete.");

Meine Socket Erzeugung:

Java:
try{
			int port = Integer.parseInt(args[0]);
			int calls = 0;
			System.out.println("Listening Port to: " + port);
			ServerSocket server_socket = new ServerSocket(port);
			while(true){
				Socket socket = server_socket.accept();
				new Thread(new WebradioClientThread(++calls, socket)).run();
			}
		}catch(IOException e)
		{
			System.err.println("Connection error: " + e.toString());
			System.exit(1);
		}

danke für die Hilfe

ciao
 
Zuletzt bearbeitet:

musiKk

Top Contributor
Binäre Daten nicht mit Reader und Writer lesen und schreiben, sondern mit Streams. Warum schreibst Du ein \0, wenn die Datei durch ist?
 
G

Gast2

Gast
Binäre Daten nicht mit Reader und Writer lesen und schreiben, sondern mit Streams. Warum schreibst Du ein \0, wenn die Datei durch ist?

aus dem gleichen Grund wieso er StreamReader für binäre Dateien verwendet ... ihm ist der Unterschied zwischen Strings (menschlich Lesbar) und Binärdaten (CPU) nicht bekannt

hand, mogel
 

Akrillo

Mitglied
Hey leute, danke für die Antworten.

Ich habe jetzt folgendes umgestellt:

Server:
Java:
out = socket.getOutputStream();
in = socket.getInputStream();
...
 byte[] buffer = new byte[16384];
 java.io.InputStream inputStream = new FileInputStream(musikDatei);
 int len = 0;
  while ((len = inputStream.read(buffer)) > 0) {
      out.write(buffer, 0, len);
 }
  System.out.println(clientIP + ": Musik - " + "sended");

Client:
Java:
                                                    System.out.println("Empfange Datei..."); //TODO rausnehmen
						    File file = new File("/home/akrillo/Downloads/webradio.wav");
								
					            OutputStream outputStream = new FileOutputStream(file);
					            
					 
					            byte[] bufferFile = new byte[16384];
					            
					            while ((len = in.read(buffer)) > 0) {
					            	outputStream.write(bufferFile, 0, len);
					            }
					            System.out.println("FERTIG");

Nun erkennt der Client nun nicht das Ende der Datei und hängt ewig in der while schleife:

Java:
while ((len = in.read(buffer)) > 0) {
	outputStream.write(bufferFile, 0, len);
}

Hat jemand eine Idee wie ich dieses Problem umgehen kann ?

lg
 

musiKk

Top Contributor
Musst Du mehrere Dinge über den Stream übertragen oder brauchst Du diesen speziellen nicht mehr, wenn die Datei fertig ist? Im ersten Fall gehts wie Michael... sagt, sonst kannst Du den Stream einfach schließen, dann liefert [c]read()[/c] -1 und die while-Schleife wird beendet.
 

Akrillo

Mitglied
Also kurz zu der kleinen Java APP

Es soll ein WebRadio werden, also Client und Server.
Das heißt der Kanal bleibt so lange offen bis der Benutzer die Verbindung per Konsoleneingabe beendet. Das heißt der Datenstrom bleibt die ganze zeit bestehen.

Ich werd das mal von Michael versuchen und meld mich falls nochmal Probleme auftreten.

bis dahin, danke !
 

HoaX

Top Contributor
Btw. solltest du beim InputStream.read auf != -1 prüfen und nicht auf >0. a) weil in der Doku steht das Ende ist bei -1 erreicht und b) weil vorallem beim Netzwerk eine 0 durchaus auftreten kann.
 

Akrillo

Mitglied
Ok danke für den Hinweis

Also leute soweit funktioniert das ganze schon!
Nun überträgt es aber die Daten recht langsam, dies liegt an folgender StreamRead Technik:

Java:
                                                 OutputStream outputStream = new FileOutputStream(file);

					            
					            
					            for(int i = 0 ; i < fileSize; i++) {
					            	len = in.read();
					            	outputStream.write(len);
					            	System.out.println(((double)i/(double)fileSize)*100 + "%");
					            }

Nun habe ich versucht mehre Bytes mit einmal zu verschicken womit das Übertragen auch viel schneller geht

Java:
					            byte[] bufferFile = new byte[16384];
					            int rounds = (int)Math.floor(fileSize / bufferFile.length);
					            if (rounds == 0)
					            	rounds = 1;
					            for(int i = 0; i<=rounds; i++)
					            {
					            	in.read(bufferFile);
					            	outputStream.write(bufferFile);
					            }
					            outputStream.flush();

Jedoch wenn ich diesen Weg gehe spielt es meine Audio Datei auch erfolgreich ab, mit einer sehr viel kürzeren Übertragungsdauer, jedoch spinnt dann meine Konsole total rum und es werden komische Daten ausgegebn, so als würde der Server noch weitere Daten schicken ...
Kennt jemand einen sauberen schnellen weg alle Bytes aufzufangen wie bei der oberen Methode jedoch mit mehr Übertragungsgeschwindigkeit?

danke für eure Hilfe

LG
Akrillo
 

musiKk

Top Contributor
Du musst erfassen, wie viele Bytes überhaupt durch [c]read()[/c] gelesen wurden. Der Buffer muss nicht immer voll sein. Ich weiß aber nicht, ob das das Problem ist, weil ich nicht weiß, inwiefern die Konsole rumspinnt.
 

Akrillo

Mitglied
Also es werden einfach ganz viele undefinierbare Zeichen ausgegebn, im Reiterkopf der Shell stehen auch komische Zeichen ....

Ich übertrage ja vorher die Anzahl der Bytes die übertragen werden müssen... Und die Wav Datei wird dann auch ordnungsgemäß abgespielt jedoch zerstört es die Ausgabe und sieht einfach mal ... aus ;p

update:

ich habe festgestellt das sich einiges verändert wenn ich:
Java:
                                                    File file = new File("/home/akrillo/Downloads/webradio.wav");
								
					            OutputStream outputStream = new FileOutputStream(file);
					            byte[] bufferFile = new byte[3812];
					            int rounds = (int)Math.floor(fileSize / bufferFile.length);
					            if (rounds == 0)
					            	rounds = 1;
					            for(int i = 0; i<=(rounds); i++)
					            {
					            	in.read(bufferFile);
					            	outputStream.write(bufferFile);
					            }
					            outputStream.flush();

mit
Java:
byte[] bufferFile = new byte[3812];

der Größe des Buffers herumspiele es manchmal geht, manchma große Fehler bei der Ausgabe gibt, und manchmal einfach hängt... woran könnte das liegen, oder hat jemand eine andere idee die Datei auf eine andere Art zu füllen.

update:

Hab am Server etwas umgestellt
vorher:
Java:
while ((len = inputStream.read(buffer)) > 0) {
      out.write(buffer, 0, len);
 }
nachher:
Java:
while ((len = inputStream.read(buffer)) > 0) {
	            out.write(buffer);
	        }

aufeinmal gehts... jemand eine idee warum das so ist ?

Möchte mich nochmals bei allen bedanken

LG
Akrillo
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
S Bild-Datei von Servlet an Browser senden Netzwerkprogrammierung 8
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2
T Datei senden Netzwerkprogrammierung 3
M Datei auf Remoteserver kopieren Netzwerkprogrammierung 8
B Datei speichern unter Netzwerkprogrammierung 10
B Laden einer *.csv Datei von einem Webserver (http-request) Netzwerkprogrammierung 8
R In Text Datei schreiben die auf einem Server liegt Netzwerkprogrammierung 8
S Unix Datei vom Server nach Windows übertragen Netzwerkprogrammierung 8
T Musik-Stream: Server sendet die Datei zu schnell ? Netzwerkprogrammierung 3
T Mit FTP verbinden, einen Ordner erstellen und Datei löschen Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben