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:
Server:
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?
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?