Problem beim Senden von Dateien

Status
Nicht offen für weitere Antworten.

VdA

Bekanntes Mitglied
Hi leute!

Ich bin grade auf ein Problem gestoßen.
Ich habe zwei Klassen geschrieben um eine Datei über das Netzwerk zu versenden
Eine für den Client und eine Für den Server
Nun soll eine Datei vom Client zum Server gesendet werden.

Client:
Code:
try{		
//hier wartet er bis der Stream schon verfügbar ist					while((filetransferstreams=com.streams.get(AbstractCommunication.FILETRANSFER_KOMMUNIKATION)) == null)Thread.sleep(1000);
	System.out.println("Starting uploading "+file+" to server.");
	ObjectOutputStream fileout = filetransferstreams.getOut();
	FileInputStream filein=new FileInputStream(file);
	
        //Und hier fängt er an die Datei einzulesen und zu senden
        //ist zwar nicht sehr perfomant aber mir ist keine andere Möglichkeit eingefallen 
       //den Fortschritt des Downloads zu berechnen
        int filesize=(int) file.length();
	for(int i=0;i<filesize;i++)
	{
		byte[] buffer=new byte[1];
		filein.read(buffer);
		fileout.write(buffer);
	}
}catch(Exception e){e.printStackTrace();}

Server:
Code:
//Hier die methode zum einlesen der versendeten Daten:
for(int i=0; i<downloaded.getMaximum(); i++)   //downloaded.getMaximum() entspricht filesize
//Solange ausführen bis das ende der Datei erreicht ist
{
	byte[] buffer=new byte[1];
	streams.getIn().read(buffer);
	streams.getOut().write(buffer);
		
        //Hier wird der Fortschritt berechnet		
	EventQueue.invokeLater(new Runnable(){
		public void run() {
			downloaded.setValue(downloaded.getValue()+1);
			downloads.repaint();
			timeElapsed=(int) (new Date().getTime()-startingtime.getTime());
			if(timeElapsed==0)timeElapsed=1;
			timeRemaining=(
				new BigDecimal(downloaded.getMaximum())
				.divide((new BigDecimal(downloaded.getValue())
					.divide(new BigDecimal(timeElapsed), 10, BigDecimal.ROUND_DOWN)
				), 10, BigDecimal.ROUND_DOWN)
				.subtract(new BigDecimal(timeElapsed))).intValue();
					}
				});
      //Das ist nur als Kontrolle wenn er "1" printet ist erfertig
     //leider kommt er nie Soweit *schnüff*
      System.out.println(downloaded.getMaximum()-i);
			}


Mein Problem ist jetzt das er immer so ungefähr 1000 bytes vorm ende Aufhört und in der for schleife steckenbleibt beim lesen aus dem InputStream

Ich habe leider keine Ahnung woran das liegt :autsch:
Kann mir jemand helfen?
 

Murray

Top Contributor
Mach mal beim Schreiben am Ende
Code:
fileout.flush();
ObjectInputStream fasst primitive Daten (hier: bytes) immer zu Blöcken von 1024 Bytes zusammen.

Eigentlich sind ObjectOutputStream und ObjectInputStream auch nicht dafür gedacht, einfach nur primitive Bytes durch die Gegend zu schicken; vielmehr können hier komplexe Objekte serialisiert, übertragen und auf der anderen Seite wieder deserialisiert werden - zum Übertragen von Dateien wäre die KOmbination (Buffered)OutputStream und (Buffered)InputStream besser geeignet.
 

VdA

Bekanntes Mitglied
Hm ja ich benutze Object(Input/Output)Streams weil ich mehrere Streams hab, die ich mit selbstprogrammierten Stream Objecten logisch geordnet hab.
Da ich die Streams Klasse so Programmiert hab, dass sie nur Object(Input/Output)Streams annimt bzw. Streams dazu hochwertet hatte sich das so ergeben.
Naja kann man ja noch ändern.
Bin auf jedenfall richtig froh, dass es jetzt geht.
thx

Edit:
Wenn ich jetzt aber Bilder damit versende, sieht es so aus aus als wären sie durch den Reiswolf gegangen.
Irgendwas macht er falsch bei schreiben der bytes ???:L
 

Murray

Top Contributor
Was du mit einem ObjectOutputStream schreibt, musst du auch mit einem ObjectInputStream lesen, denn da werden neben den reinen Nutzdaten (also den hier den Bytes) noch irgendwelche Verwaltungsinformationen geschrieben (quasi "jetzt kommen 768 bytes",[768 bytes], "jetzt kommen 5 ints",[ 5 ints] usw). Wenn du diesen Datenstrom jetzt einfach byte-weise interpretierst, muss das schiefgehen.
Wenn du schon mit ObjectIn/OutputStream arbeiten musst, kannst du die Dateien vielleicht in serialisierbare Objekte verpacken. Alternativ kannst du wohl mit ObjectOutputStream#writeByte( int val) und ObjectInputStream#readByte() arbeiten.
 

VdA

Bekanntes Mitglied
nagut ich baus um auf den Kram hab ich keinen Bock dann doch lieber BufferedOutPutstream

EDIT: So jetzt benutz ich BufferedOut(/In)putStreams und das ganze funzt perfekt
War zwar ne riesen Arbeit das umzubauen aber es hat sich gelohnt :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
J Problem beim Senden von File Netzwerkprogrammierung 4
R Problem beim Senden von Emails (Javamail) Netzwerkprogrammierung 2
D Performance Problem beim File senden, empfangen Netzwerkprogrammierung 4
R Problem beim Programmieren eines Chatprogramms Netzwerkprogrammierung 5
S Umstellung AS400 auf Postgre - Problem beim Arbeiten mit Metadaten Netzwerkprogrammierung 2
G Socket NIO2 Problem mit AsynchronousSocketChannel beim Schließen Netzwerkprogrammierung 3
D RMI Problem beim shutdown von verteilter CORBA-Anwendung Netzwerkprogrammierung 6
M Problem beim Datenempfang Netzwerkprogrammierung 2
N NIO Problem beim speziellen Behandeln von einzelnen Benutzern Netzwerkprogrammierung 13
E HTTP Problem beim Auslesen von Websiten Netzwerkprogrammierung 6
Y Problem mit ObjectInputStream beim lesen vom Socket Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
I Problem beim empfangen von Daten (Zahlen) Netzwerkprogrammierung 7
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
P problem beim schließen eines Streams Netzwerkprogrammierung 6
C Session Problem beim Zugriff auf Webseiten Netzwerkprogrammierung 3
I Apache http-client: Problem beim Proxyaufruf Netzwerkprogrammierung 2
C RMI: Problem beim Aufruf einer Methode. Falsch gecastet? Netzwerkprogrammierung 8
D Problem beim holen einer PHP-Seite via HttpClient Netzwerkprogrammierung 19
J Problem beim versenden von eigenen Objekten über RMI Netzwerkprogrammierung 2
M problem beim schicken von XML-DAtenpacketen via TCP Netzwerkprogrammierung 3
I Socket Problem mit den WebSocket Antworten der Discord API Netzwerkprogrammierung 0
K Java Websocketserver Problem | Android to Pi Netzwerkprogrammierung 1
C RMI Produzent-Verbraucher-Problem - Code review Netzwerkprogrammierung 12
B Socket Bilder verschicken via Sockets. Heap-Problem. Netzwerkprogrammierung 2
S Problem bei dem Bluetoothverbindungsaufbau Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
M Netty - TCP Problem Netzwerkprogrammierung 4
L Socket Problem mit Server Netzwerkprogrammierung 1
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
M Problem bei Socket (MultiplayerSpiel) Netzwerkprogrammierung 4
M Socket CDI, Websocket reference Problem ! Netzwerkprogrammierung 2
Shams Problem mit Eventbus in Verbindung mit Server Netzwerkprogrammierung 0
G apache httpClient Problem. Netzwerkprogrammierung 5
H Problem mit ObjectStreams Netzwerkprogrammierung 3
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
Maxim6394 Problem mit Socks5 Implementierung Netzwerkprogrammierung 0
C Handle Connection Problem Netzwerkprogrammierung 3
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
O 4Gewinnt Multiplayer - Netzwerk Problem (TCP) Netzwerkprogrammierung 1
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
E einfaches Problem: Session-Handling bei Servlets Netzwerkprogrammierung 5
G Problem mit einem FileWatcher Netzwerkprogrammierung 7
T Socket Server starten Thread Problem Netzwerkprogrammierung 12
B Client/Server Connection Problem Netzwerkprogrammierung 2
G Problem mit STATIC-Verständnis Netzwerkprogrammierung 8
J Facelets Include Rendered Problem Netzwerkprogrammierung 2
J Socket Problem mit C++/Java Netzwerkprogrammierung 20
P Problem mit Datagram-Sockets Netzwerkprogrammierung 2
G Cookie Verwaltungs Problem nach Login auf InetSeite (Wo utma-Cookie?) Netzwerkprogrammierung 18
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 7
B Socket Problem mit Netzwerkchat Netzwerkprogrammierung 21
Maxim6394 ipv6 Problem Netzwerkprogrammierung 2
Maxim6394 Proxyserver Performance Problem Netzwerkprogrammierung 11
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
C Socket Problem mit ObjectInput/OutputSream Netzwerkprogrammierung 5
B RMI und Problem mit rmic-Tool Netzwerkprogrammierung 3
C FTP storeFileStream Problem Netzwerkprogrammierung 3
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
D JavaMail - Mailsabrufen Problem (imap) Netzwerkprogrammierung 12
J HTTP Übersetzung yahoo babelfish - Zeichensatz-Problem Netzwerkprogrammierung 6
D Apache CXF, JAX-WS Problem bei Arrays - einfacher Server Netzwerkprogrammierung 2
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
M Problem mit Socket-Verbindung Netzwerkprogrammierung 2
D Thread problem Netzwerkprogrammierung 3
T Servlets JSP: Tomcat Problem Netzwerkprogrammierung 4
K Client - Server Problem Netzwerkprogrammierung 16
T RMI Problem Client-Server Netzwerkprogrammierung 2
P RMI Stub Problem Netzwerkprogrammierung 3
D Socket UDP Übertragungs Problem Netzwerkprogrammierung 7
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 2
I HTTP Post aus html in Java einlesen - Problem Netzwerkprogrammierung 6
D Problem mit ObjectInputStreams Netzwerkprogrammierung 10
D Socket Problem mit InputStreamReader Netzwerkprogrammierung 3
N CRC32 CheckSum Problem bei UDP Netzwerkprogrammierung 2
V Java Mail Api - IMAP Problem Netzwerkprogrammierung 6
P RMI Problem Netzwerkprogrammierung 4
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
S Socket Problem mit Objektübertragung Netzwerkprogrammierung 16
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
S Problem mit 2 Serversockets unter Win XP Netzwerkprogrammierung 7
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
M RMI - Connection Problem Netzwerkprogrammierung 7
J Socket Client - Server Problem Netzwerkprogrammierung 4
M Socket Chat-Client-Problem Netzwerkprogrammierung 8
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
T Problem bei Findung der richtigen Architektur Netzwerkprogrammierung 3
AlexSpritze Authentication Problem bei WebServices Netzwerkprogrammierung 4
J Socket Problem -Proxies Netzwerkprogrammierung 2
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
F Konzept Problem Netzwerkprogrammierung 12
G NIO Sockets Architektur Problem Netzwerkprogrammierung 2
H Neues NIO problem nachricht an alle clients Netzwerkprogrammierung 3
J Client server problem Netzwerkprogrammierung 3
S Problem bzgl. Sockets / Server-Client-Struktur Netzwerkprogrammierung 3
W RMI Problem Netzwerkprogrammierung 4
M Problem mit Server Netzwerkprogrammierung 5
N Socket Java server c# client problem Netzwerkprogrammierung 7

Ähnliche Java Themen


Oben