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)
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..
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 ... }
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..
Synes godt om
Ny brugerNybegynder
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.