Hallo!
Ich habe folgendes Problem: Hab mir eine Anwendung (Client/Server) geschrieben die es mir möglich macht von einem Rechner auf den anderen zuzugreifen, dort im Dateisystem zu browsen und natürlich auch Dateien runterzuladen. Das ganze funktioniert auch super wenn ichs auf meinem Rechner teste...also hald Server bei mir und ich connecte mit dem Client der auch bei mir läuft zu meiner IP. Ich kann browsen und Dateien runterladen.
Habe das ganze jetzt aber natürlich auch im LAN gestestet und da habe ich jetzt folgendes Problem:
Ich starte am Rechner meines Bruders (WinXP) den Server und verbinde mich von meinem Rechner (Kubuntu 7.04) aus zum Server bei meinem Bruder. Zuerst funktioniert das ganze super. Ich kann im Dateisystem herumbrowsen was ich will jedoch wenn ich eine Datei downloaden will passiert folgendes. Der Server beginnt Daten zu schaufeln und der Client liest auch brav Daten aus seinem Stream. Dann ist der Server fertig (hat alle Bytes in den Stream geschrieben) und der Client wartet noch immer auf die letzten paar Bytes.
Keine Ahnung wieso...
Der Code sieht folgendermaßen aus:
Server:
Client:
Die Angabe im if(i%1000... stimmt nimmer weil ich die Bytefeldgröße mitlerweile geändert hab. Habs vorher mit 1024 gehabt und jetzt eben mit 1024 * 1024 probiert.
Der Server gibt System.out.println(sum+" von "+dl.length()+" Bytes gesendet!"); das richtig aus also muss er alles in den Stream schreiben aber anscheinend kommt nicht alles beim Client an?!? Gibts das dass ich da Bytes verliere? Aber TCP dürfte das doch nicht zulassen oder?
Also bitte seid so gut und helft mir,
lg ga
Ich habe folgendes Problem: Hab mir eine Anwendung (Client/Server) geschrieben die es mir möglich macht von einem Rechner auf den anderen zuzugreifen, dort im Dateisystem zu browsen und natürlich auch Dateien runterzuladen. Das ganze funktioniert auch super wenn ichs auf meinem Rechner teste...also hald Server bei mir und ich connecte mit dem Client der auch bei mir läuft zu meiner IP. Ich kann browsen und Dateien runterladen.
Habe das ganze jetzt aber natürlich auch im LAN gestestet und da habe ich jetzt folgendes Problem:
Ich starte am Rechner meines Bruders (WinXP) den Server und verbinde mich von meinem Rechner (Kubuntu 7.04) aus zum Server bei meinem Bruder. Zuerst funktioniert das ganze super. Ich kann im Dateisystem herumbrowsen was ich will jedoch wenn ich eine Datei downloaden will passiert folgendes. Der Server beginnt Daten zu schaufeln und der Client liest auch brav Daten aus seinem Stream. Dann ist der Server fertig (hat alle Bytes in den Stream geschrieben) und der Client wartet noch immer auf die letzten paar Bytes.
Keine Ahnung wieso...
Der Code sieht folgendermaßen aus:
Server:
Code:
System.out.println("Download request für "+dir.getAbsoluteFile()+fsdelim+ubef);
File dl=new File(dir.getAbsoluteFile()+fsdelim+ubef);
FileInputStream fis=new FileInputStream(dl);
byte b[]=new byte[1024*1024];
int n;
ps.println(dir.getAbsoluteFile()+fsdelim+ubef);
try{
long sum=0;
while(sum<dl.length() && (n=fis.read(b))!=-1) {
os.write(b,0,n);
os.flush();
sum+=n;
System.out.println(sum+" Bytes gesendet!");
}
System.out.println(sum+" von "+dl.length()+" Bytes gesendet!");
} catch(IOException e){
System.out.println("-- IOException beim Kopieren --");
}
os.flush();
System.out.println("Download beendet!");
Client:
Code:
System.out.println(inServ.readLine()+" nach "+target);
byte b[]=new byte[1024*1024];
int n;
try{
int i=0;
long sum=0;
long soll=(((Satz)saetze[datei-1]).getSize()); //Dateigröße die mir Server angibt
while(sum<soll&&(n=is.read(b))!=-1) {
i++;
fos.write(b,0,n);
sum+=n;
if(i%1000==0) {
double proz=((double)sum)/((double)soll);
System.out.println(i+"KB downloaded..."+Math.round(proz*100)+"%");
}
System.out.println(sum+"/"+soll);
}
fos.close();
System.out.println(sum+" bytes downloaded...100%");
} catch(IOException e){
System.out.println("-- IOException beim Kopieren --");
e.printStackTrace();
}
System.out.print("Download beendet!\n> ");
Die Angabe im if(i%1000... stimmt nimmer weil ich die Bytefeldgröße mitlerweile geändert hab. Habs vorher mit 1024 gehabt und jetzt eben mit 1024 * 1024 probiert.
Der Server gibt System.out.println(sum+" von "+dl.length()+" Bytes gesendet!"); das richtig aus also muss er alles in den Stream schreiben aber anscheinend kommt nicht alles beim Client an?!? Gibts das dass ich da Bytes verliere? Aber TCP dürfte das doch nicht zulassen oder?
Also bitte seid so gut und helft mir,
lg ga