12. juni 2003 - 19:12Der er
16 kommentarer og 1 løsning
TCP med Socket
Sikrer en socket-forbindelse ikke, at en forbindelse er åben og hvis ikke at der smides en exception af en slags (evt. SocketException eller IOException)? Altså er det ikke noget der ligger i TCP-protokollen, at det opdages, hvis forbindelse afbrydes pga. jordskælv, atomangreb, eller at ledningen unplugges?
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
Kan en socket være åben selvom forbindelsen er afbrudt. Jeg ved godt at der bliver smidt exceptions, men kan det i visse, sjældne tilfælde lade sig gøre, eller smides er det konsekvent synligt i ALLE tilfælde? F.eks. kan det ses at forbindelsen er blevet afbrudt, hvis der gennem input-strømmen modtages '-1' i det uendelige...
Nu sidder jeg og udvikler den er multiplayer-server - og min kolleger foreslår en ping-mekanisme, hvor klienterne pinger serveren, og hvis serveren så ikke modtager noget fra klienterne i et minuts tid, bliver de disconnected (Socket.setSoTimeout).
Jeg vil bare mene at det er spil af trafik, hvis jeg kan være sikker på at det altid vil blive opdaget...
Uanset om du får en exception eller read returnerer -1 kan du vel tolke det som om klienten er logget af/forbindelsen er gået tabt. Hvis dit problem er at read kaldet aldrig returnerer fordi der (mod forventning) ikke er noget at læse, skal du bruge den nye non-blocking io tilføjelse der kom i version 1.4 i stedet for setSoTimeout()
Jeg er nemlig også siden da gået over til at bruge NIO, som skulle være mere sikkert i opdagelsen af afbrudte forbindelser. Det har bare siden givet tusind andre problemer, som dog efterhånden er blevet løst, men ikke alle...
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.