WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 16.06.2007, 22:44   #1
TimmyX
Jr. Member
 
Registriert seit: 27.12.2003
Beiträge: 56


Standard java server-client probleme bei Datenübertragung

Hi Leute,

Ich suche nun schon sehr lange nach dem Fehler, aber ich finde es einfach nicht.

hoffe ihr könnt mir helfen

Klasse für FileTransfer enthält diese Methoden

Code:
public static void sendFile(String filename, OutputStream out) {
		DataOutputStream dataout = new DataOutputStream(out);
		int i;
		byte[] buffer = new byte[1024];
		try {
			InputStream in = new FileInputStream(filename);
			while( (i = in.read(buffer)) > 0) {
				System.out.println("transmitting @ remote");
				dataout.write(buffer, 0, i);
			}
			System.out.println("transmission completed @ remote");
			dataout.flush();
			in.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void receiveFile(String filename, InputStream in) {
		DataInputStream datain = new DataInputStream(in);
		int i;
		byte[] buffer = new byte[1024];
		
		try {
			OutputStream out = new FileOutputStream(filename);
			while( (i = datain.read(buffer)) != -1) {
				System.out.println("transmitting @ local");
				System.out.println("i is: "+i);
				System.out.println("buffer: "+buffer);
				out.write(buffer, 0, i);
				System.out.println("i is: "+i);
			}
			System.out.println("transmission completed @ local");
			out.flush();
			out.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
hier gibt es dann probleme
Code:
while( (i = datain.read(buffer)) != -1) {
				System.out.println("transmitting @ local");
				System.out.println("i is: "+i);
				System.out.println("buffer: "+buffer);
				out.write(buffer, 0, i);
				System.out.println("i is: "+i);
			}
System.out.println("transmission completed @ local");
der client kommt nur zum zweiten println("i is: "+i);

das transmission completed wir nicht mehr ausgegeben.

die Ausgabe sieht so aus
transmitting @ local
i is: 6
buffer: [B@bb6ab6
i is: 6

der server kommt bis zum transmission completed.


achja zum Senden verwende ich Inputstream vom client bzw. server


weiss einer von euch wieso es nicht funktioniert?
____________________________________
cYa

TimmyX
TimmyX ist offline   Mit Zitat antworten
Alt 18.06.2007, 21:29   #2
jak
Inventar
 
Registriert seit: 13.06.2001
Beiträge: 1.830


Standard

Kurz gesagt: Weil read blocking ist.

Erklärung: Der .read() Befehl blockiert solange bis es etwas zu lesen gibt. Das der Server inzwischen den Socket geschlossen hat bekommt er nicht mit.
Zitat:
This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
Quelle: JavaDoc http://java.sun.com/javase/6/docs/ap...ream.html#read()

Die einzigen Möglichkeiten die ich kenne das zu vermeiden sind:
1.) Der Client weiß wie viele Zeichen er noch lesen darf ohne das .read() blockiert (siehe auch .available()).
2.) Es gibt einen Code oder ein Zeichen das das Ende der Übertragung anzeigt (z.B. '.' beim SMTP Protokoll).

jak
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona)
Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing.
\"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra)
jak ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:10 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag