29. september 2005 - 10:08Der er
11 kommentarer og 1 løsning
hvorfor lukkes min socket?
Hej
Jeg bruger metoden getData(...) til at hente data via en Socket. Da den kaldes rimelig ofte har jeg ikke lyst til at oprette en Socket hver eneste gang. Derfor opretter jeg en Socket før jeg kalder metoden første gang, og overfører denne som parameter (mySocket).
Dette går fint første gang. Næste gang får jeg en exception når programmet kommer til "hostOut = new Buffere..." med beskeden "Socket is closed".
Hvorfor lukkes den, og kan jeg forhindre det, eller skal jeg designe mit program anderledes?
String getData(Socket mySocket,........) {
mySocket = new Socket(myIP,80); System.out.println("GetLogDataString 4"); staticSocket.setSoTimeout(10000);
hostOut = new BufferedWriter(new OutputStreamWriter(paramSocket.getOutputStream(),"UTF-8"));
hostIn = new InputStreamReader(paramSocket.getInputStream(),"UTF-8"); hostOut.write(request); hostOut.flush();
int numberOfBytesToReadAhead = 1000; char[] c = new char[numberOfBytesToReadAhead];
int n; while((n = hostIn.read(c,0,numberOfBytesToReadAhead)) >= 0) { response += new String(c,0, n); }; hostIn.close(); hostOut.close(); }
ups, det var en copy-paste fejl. linierne: "mySocket = new Socket(myIP,80); System.out.println("GetLogDataString 4"); staticSocket.setSoTimeout(10000);" skal slet ikke være med her. De er heller ikke med i min egen kode.
Jamen jeg åbner den også uden for metoden :-( men får blot en exception på "Socket is closed" har de noget at gøre med at jeg i metoden closer hostIn og hostOut?
nej det var også en copy-paste fejl at jeg har fået åbbet den indenfor. Det er kun er på eksperten at det er med. Jeg åbner den ikke indefor i min egen kode.
Jeg har fundet ud at at Socket har en property som hedder "closed". denne bliver true når "hostIn.close();" er blevet kaldt. hmmm, skal "BufferedWriter" måske også udenfor? Det her virker åndsvagt
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.