Avatar billede supa Nybegynder
30. juni 2005 - 10:26 Der er 6 kommentarer

java.net.SocketException: Connection reset

Hejsa,

Jeg får den her fejl fra min server når min klient lukkes ned, jeg vil gerne undgå denne fejl, og have enten klienten til at informere serveren om at den dør, eller så skal serveren finde ud af det på en mindre drastisk måde end den gør nu..

Serveren kan tage multiple klienter, og opretter en thread til hver klient, som skal blve ved med at køre så længe klienten lever.. Forbindelsen skal være åben så længe klienten kører, og kun afbrydes af at klienten lukker ned..

Så mit spørgsmål er hvordan skal jeg kunne fortælle serveren's thread at den ikke er nødvendig længere..?

Jeg har været nødsaget til at break; min exception for at serveren ikke overflower og crasher..

Jeg får følgende exception:

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.ObjectInputStream$PeekInputStream.peek(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.peek(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at database.server.ClientWorker.run(ClientWorker.java:58)
    at java.lang.Thread.run(Unknown Source)
Avatar billede arne_v Ekspert
30. juni 2005 - 10:31 #1
grundliggende mener jeg at du har 2 muligheder

1) serveren catcher den exception silent

2) client sende rnoget til server som får server til at lukke pænt ned selv
Avatar billede supa Nybegynder
30. juni 2005 - 11:43 #2
1) Jeg catcher allerede exceptionen, men jeg er bange for at den thread som excepter foresager at min server crasher.. Der er bare det problem at jeg ikke kan nå at se den exception som serveren crasher på, og jeg har svært ved at få fejlen til at ske igen.. Det skal lige siges at når serveren crasher, så genstarter hele maskinen simplethen..

2) Jeg er bare lidt i tvivl om hvordan klienten skal sende noget når den bare bliver termineret uden brug af en quit knap, derfor vil jeg gerne at serveren måske selv kan finde ud af det uden at lave en exception..
Avatar billede arne_v Ekspert
01. juli 2005 - 21:19 #3
at et java program crasher bør aldrig kunne få maskinen til at genstarte
(det er jo en seperat virtuel maskine som kører java programmet)

måske kan du bruge et shutdown hook ?
Avatar billede sondergard Nybegynder
07. juli 2005 - 23:07 #4
Det kræver nok at du i din kommunikationsprotokol mellem klient og server har en kommando der kan fortælle serveren at klienten logger af. Nu ved jeg ikke hvordan det er skruet sammen, men i servertråden kunne det jo ligne noget i stil med

public void run(){
  ...
  do {
    input = in.readInt();
    switch (input) {
      case 5: // afslutkommandoen
        break;
    }
  } while (input != 5); // Ved 5 hopper den ud af den uendelige løkke og run løber ud (tråden dør)
  output.writeInt(5); // Tving klienten ud af dens uendelige løkke
  ...
}
Avatar billede arne_v Ekspert
03. september 2005 - 20:02 #5
supa>

kommet videre ?
Avatar billede supa Nybegynder
05. september 2005 - 08:44 #6
Nej, jeg sidder lidt fast med det, så indtil videre har jeg accepteret den exception som der kommer, men jeg har planer om at kigge på det igen senere, når jeg lige har afsluttet nogle andre detaljer ved programmet..
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