Vinnaren i pepparkakshustävlingen!
2008-01-16, 16:46
  #1
Medlem
Sitter och knåpar lite med en javaserver vars enda uppgift är att skicka iväg en fil till den person som connectar till den med valfri webbläsare. HTTP-headers'arna ser ut som de ska och borde inte vara problemet.
Det fungerar som det borde men all data går inte fram (~94%+ bryts det). Jag undrar såklart varför!?

Ligger det data i ngn buffer och väntar ngnstans eller vad försiggår.
Thread.Sleep(10000); efter while-loopen får det att fungera ibland. Men det är ingen lösning jag är nöjd med.

dos är en DataOutputStream till clienten som connectat
inFile är en ström från filen som skall skickas

Kod:
byte data[] = new byte[10240];
int count = 0;
while ((count = inFile.read(data)) != -1){
     dos.write(data, 0, count);
     total += count;
     System.out.print("\rSent: " + total + "/" + file.length() + " Bytes");
}

dos.flush();

dos.close();
connection.close();
srv.close();
inFile.close();
Citera
2008-01-16, 19:34
  #2
Medlem
Skickar du någon http-header och hur ser den ut?
Citera
2008-01-16, 19:39
  #3
Medlem
Here goes

De HTTP-headers som skickas med
Variabeln MIME är tex = audio/mpeg eller motsvarande

Kod:
String header = "HTTP/1.1 200 OK\r\n"
	    + "Server: OneFile beta0.1\r\n"
	    + "Content-Length: " + file.length() + "\r\n"
	    + "Content-Disposition: attachment; filename=\"" + file.getName() + "\"\r\n"
	    + "Content-type: " + MIME + "; charset=utf-8\r\n\r\n";
__________________
Senast redigerad av lode 2008-01-16 kl. 19:41.
Citera
2008-01-16, 19:45
  #4
Medlem
Citat:
Ursprungligen postat av lode
De HTTP-headers som skickas med
Variabeln MIME är tex = audio/mpeg eller motsvarande

Kod:
String header = "HTTP/1.1 200 OK\r\n"
	    + "Server: OneFile beta0.1\r\n"
	    + "Content-Length: " + file.length() + "\r\n"
	    + "Content-Disposition: attachment; filename=\"" + file.getName() + "\"\r\n"
	    + "Content-type: " + MIME + "; charset=utf-8\r\n\r\n";

Jag tycker koden ser ok ut, en vild chansning är att klienten stänger ner för den tror den fått allt. Det enda som jag ser som skulle kunna påverka är "charset=utf-8" under Content-Type. Ska man ha det på binärdata? Annars har jag slut på idéer och är lika konfunderad som dig .
Citera
2008-01-16, 20:01
  #5
Medlem
Jag sliter mitt hår litegrann..
Tog bort UTF-8, men det spelade verkligen ingen roll..
Jag måste ha missat ngt grundläggande

Jag förstår inte. Det är drygt 100kb som inte går fram. Och det är inte för att clienten stänger, utan snarare för att servern stryper TCP connectionen. Men det ska den göra först när den skickat iväg ALL data.

Jag blir sjukt irriterad
Citera
2008-01-17, 10:08
  #6
Medlem
MrRedmans avatar
Vet inte hur det är med content-length, är det lasten eller hela http responsen (dvs inkl header) som ska anges. Där kan det ju försvinna en del om det är hela responsen som ska anges och du anger bara lasten (filen).

Kolla oxå att längden på filen stämmer med vad du mäter i programmet.

Flusha alla strömmar innan du stänger dom. Det ska väl egentligen flushas automatiskt när man stänger, men man vill ju vara på den säkra sidan.

Testa att använda telnet + en liten textfil så kanske du kan debugga på ett bättre sätt. Då ser du ju när man får responsen och lasten och ser vada som händer.

Posta hela ditt program så finns det säkert någon som kan hjälpa dig. Kanske gör du något fel som inte syns i din lilla kodsnutt?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback