Hallo,
ich habe ein kleines Problem.
JHTTPServ ist ein kleiner HTTP Server, JResume ein kleines Download Tool für HTTP und FTP.
Wenn ich mit einem Browser wie Opera eine 900 MB Datei von JHTTPServ runterlade,
aber nach 10 MB abgebrochen wird, bricht auch JHTTPServ das senden ab, durch die checkError()
Methode von PrintStream. Lade ich aber diese Datei mit JResume runter, und breche nach 10 MB
ab, hört JHTTPServ nicht auf, geht auf 100% CPU Belastung und liesst die Datei zuende.
Und das ist das Problem, warum ist das so?
Folgendes zum JHTTPServ:
Damit Ihr wisst, was was ist:
So sende ich eine Datei:
Exceptions werden natürlich abgefangen.
Folgendes zu JResume:
Damit Ihr wisst, was was ist:
So empfange ich eine Datei:
Auch hier: Exceptions werden natürlich abgefangen.
Die Methode isOnline():
JResume macht folgendes, wenn der Download abgebrochen wird:
ich habe ein kleines Problem.
JHTTPServ ist ein kleiner HTTP Server, JResume ein kleines Download Tool für HTTP und FTP.
Wenn ich mit einem Browser wie Opera eine 900 MB Datei von JHTTPServ runterlade,
aber nach 10 MB abgebrochen wird, bricht auch JHTTPServ das senden ab, durch die checkError()
Methode von PrintStream. Lade ich aber diese Datei mit JResume runter, und breche nach 10 MB
ab, hört JHTTPServ nicht auf, geht auf 100% CPU Belastung und liesst die Datei zuende.
Und das ist das Problem, warum ist das so?
Folgendes zum JHTTPServ:
Damit Ihr wisst, was was ist:
Code:
Socket socket; // Bekommt er von ServerSocket übergeben.
PrintStream out = new PrintStream(socket.getOutputStream(), true, "UTF-8");
BufferedInputStream in = new BufferedInputStream(socket.getInputStream(), 4096);
So sende ich eine Datei:
Code:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(lastFileAccess));
byte[] buf = new byte[256];
int len;
while ((len = bis.read(buf)) != -1)
{
if (out.checkError())
{
break;
}
out.write(buf, 0, len);
}
Folgendes zu JResume:
Damit Ihr wisst, was was ist:
Code:
private Socket client = new Socket(host, port);
private BufferedInputStream in = new BufferedInputStream(client.getInputStream(), 4096);
private PrintStream out = new PrintStream(client.getOutputStream(), true);
So empfange ich eine Datei:
Code:
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(localFile, true));
bytesDownloaded = 0;
for (; bytesDownloaded < contentSize; bytesDownloaded++)
{
if (Thread.currentThread().isInterrupted())
{
break;
}
if (isOnline())
{
bos.write(in.read());
}
}
Die Methode isOnline():
Code:
boolean isOnline()
{
if (client == null)
{
return false;
}
else
{
return client.isConnected();
}
}
JResume macht folgendes, wenn der Download abgebrochen wird:
Code:
void closeConnection()
{
try
{
if (client != null)
{
client.shutdownInput(); // Hatte ich erst später hinzugefügt, hilft auch nicht
client.shutdownOutput(); // Hatte ich erst später hinzugefügt, hilft auch nicht
}
if (in != null)
{
in.close();
in = null;
}
if (out != null)
{
out.close();
out = null;
}
if (client != null)
{
client.close();
client = null;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}