Avatar billede hvinther Nybegynder
23. januar 2002 - 09:12 Der er 11 kommentarer og
1 løsning

stoppe URLConnection.getInputStream()

Jeg har en URLConnetion der nogen gange "hænger" i getInputStream. Fx ved fejl i forbindelsen.

getInputStream() kaldes i run() i en tråd.

Hvordan afbryder jeg den??

Thread.stop() virker ikke (og for øvrigt deprecated).

Avatar billede disky Nybegynder
23. januar 2002 - 09:17 #1
Brug JDK1.4 som understøtter timeout på connections.

Istedet for .stop() send et message til tråden om at den skal lukke tråden.

Hvis du tvinger den til det udefra er der chance for tab af hukommelse
Avatar billede disky Nybegynder
23. januar 2002 - 09:17 #2
var et svar
Avatar billede hvinther Nybegynder
23. januar 2002 - 09:20 #3
Hvis jeg sender en message til en tråd der hænger, hvordan for jeg så tråden til at opdage den message, og stoppe sig selv?

Desværre er jeg begrænset til JDK1.3 :((
Avatar billede rolchau Nybegynder
23. januar 2002 - 11:28 #4
Har du prøvet en interrupt på tråden? I api'en står en beskrivelse af det.
Avatar billede carstenknudsen Nybegynder
23. januar 2002 - 11:51 #5
Har du kaldt getOutputStream før du kalder getInputStream?
Avatar billede hvinther Nybegynder
23. januar 2002 - 15:04 #6
Ja,jeg har kaldt getOutputStream først.

Jeg tester lige lidt med interrupt.
Avatar billede hvinther Nybegynder
23. januar 2002 - 15:25 #7
interrupt virker ikke :(
Avatar billede rolchau Nybegynder
23. januar 2002 - 15:29 #8
Så tror jeg du er nødt til at vise og din run metode, for det er svært at sige hvor det går galt ellers.
Avatar billede hvinther Nybegynder
23. januar 2002 - 15:39 #9
Et uddrag af run. Det jeg har brug for er (tror jeg) en måde at afbryde getInpuStream.


    OutputStream os = serverConn.getOutputStream();
        if (toServer != null)
        {
            os.write(toServer);
        }
        os.close();
        serverConn.connect();
        is = serverConn.getInputStream(); //HER HÆNGER DEN
Avatar billede hvinther Nybegynder
23. januar 2002 - 16:14 #10
btw, min URLConnection er en HttpURLConnection. Kan et kald til disconnect evt. gøre det??

Jeg prøver.
Avatar billede elster Nybegynder
23. januar 2002 - 18:32 #11
Jeg har haft det præcis samme problem:

URLConnection klassen har ikke nogle metoder som man kan kalde for at afbryde forbindelsen, og
man har endnu ikke en InputStream som man kan lukke, da man aldrig returnere fra URLConnection.getInputStream().
Ligeledes kan man i URLConnection heller ikke sætte noget som helst angående time out.

Havde det nu været ligesom Socket klassen der har close() og setSoTimeOut() metoderne, havde det ikke været noget problem :(

Man kan heller ikke interrupte tråden, så den bliver tvunget til at hoppe ud af URLConnection.getInputStream(),
ved f.eks. at kalde: myURLConnectionThread.interrupt();

På Win98 virker det fint med interrupt() og jeg fik som forventet en IOException der siger "Thread interrupted". Men på WinNT sker der ikke noget som helst,
og den bliver bare hængende i getInputStream() kaldet som om intet var hændt. Jeg fandt forresten nedenstående URL, der bekræfter dette problem med NT:
http://forum.java.sun.com/thread.jsp?forum=31&thread=42328

Lige meget hvad man gør på NT, så bliver den altså hængende i dette kald - myURLConnectionThread.stop() hjælper heller ingenting.

Jeg prøvede også at udskifte URLConnection med et HttpURLConnection objekt, da denne klasse, som du siger, indeholder en disconnect() metode,
som jeg håbede på ville få tråden til at hoppe ud af getInputStream() kaldet:
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
InputStream input = connection.getInputStream(); // hænger her
.....
connection.disconnect(); // afbryd forbindelsen fra en anden tråd

Men dette havde slet ikke nogen virkning - hverken på Win98 eller NT.

Som den eneste mulighed tilbage, så jeg kun at oprette en Socket på port 80 og følge http protokollen.
Avatar billede disky Nybegynder
23. januar 2002 - 21:12 #12
jo der er timeout indbygget i JDK1.4
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester