Avatar billede root Nybegynder
12. december 1999 - 13:27 Der er 4 kommentarer og
2 løsninger

java.net.Socket.setSoTimeout() ??

Jeg har lavet et program hvori der skal åbnes en Socket (og lukkes hvis man vil) til en anden computer.
Nu vil jeg gerne have lavet sådan at der bliver lukket for denne socket (og alle streams på den) automatisk, for eksempel efter 10 sekunder uden trafik - hvordan gør jeg!

Skal jeg bruge metoden nævnt i titlen?!

Avatar billede andersb Nybegynder
12. december 1999 - 17:38 #1
Ja, du skal bruge metoden java.net.Socket.setSoTimeOut.

Normal blokerer / venter programmet ved læsning fra socket [hvis der ikke er data klar fra afsender].
Med setSoTimeout kan du sætte en maksimal tidsgrænse på ventetiden.

Vedr. lukning, så der det [så vidt jeg husker] sådan at hvis man blot lukker socket'en, så lukker man også de streams, der er åbnet på baggrund af den.

Mere om netværksprogrammering i Java på http://www.rhs.dk/anders/javanet/ [devsærre intet om time-out på sockets]

- Anders
Avatar billede root Nybegynder
12. december 1999 - 21:04 #2
lad os sige at jeg sætter setSoTimeOut(5000) - vil Socket'en så blive lukket efter 5 sekunder. Eller skal jeg tjekke på Socket'en på en anden måde? evt om timeouten er udløbet ??

vedr. lukning, så er det en god ide at lukke de streams der er associeret med en bestemt socket INDEN man kører Socket.close() - derved gør man det hele klar til "garbage-collectoren". Ellers ville det optage system resourcer imens programmet kører!!
Avatar billede root Nybegynder
12. december 1999 - 21:08 #3
kanon hjemmeside du har vedr. netværk og programmering.....
Avatar billede andersb Nybegynder
14. december 1999 - 14:38 #4
Hvis du får en timeout, så modtager dit program en java.io.InterruptedIOException. Den kan du så catch'e.
Se
http://java.sun.com/products/jdk/1.2/docs/api/java/net/Socket.html#setSoTimeout(int)
- Anders
Avatar billede root Nybegynder
16. december 1999 - 19:37 #5
Jeg kigger selv ofte i JDK doc'en, men der var ingen hjælp denne gang. Åbenbart heller ikke her på eksperten. setSoTimeout(3000) stopper blot mit program i at forsøge på at få kontakt med serveren efter 3 sekunder - og ikke som jeg havde tænkt mig: Holde øje med om der er trafik på den "linie" jeg har åbnet vha. Socket...hvis ikke; så luk linien!
Avatar billede root Nybegynder
16. december 1999 - 19:39 #6
tak for hjælp - hvis du har noget at tilføje så mail mig på rasmusaslak@hotmail.com
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