Java >> Java tutorial >  >> Tag >> java.net

Java simpel kode:java.net.SocketException:Uventet slutning af fil fra server

"Uventet afslutning af fil" betyder, at fjernserveren accepterede og lukkede forbindelsen uden at sende et svar. Det er muligt, at fjernsystemet er for travlt til at håndtere anmodningen, eller at der er en netværksfejl, der tilfældigt afbryder forbindelser.

Det er også muligt, at der er en fejl på serveren:noget i anmodningen forårsager en intern fejl, og serveren lukker simpelthen forbindelsen i stedet for at sende et HTTP-fejlsvar, som det burde. Flere personer foreslår, at dette er forårsaget af manglende overskrifter eller ugyldige overskriftsværdier i anmodningen.

Med den tilgængelige information er det umuligt at sige, hvad der går galt. Hvis du har adgang til de pågældende servere, kan du bruge pakkesniffningsværktøjer til at finde, hvad der præcist sendes og modtages, og se på logfiler til serverprocessen for at se, om der er nogen fejlmeddelelser.


Oversigt

Denne undtagelse opstår, når du forventer et svar, men stikket er blevet brat lukket.

Detaljeret forklaring

Javas HTTPClient , fundet her, kaster en SocketException med beskeden "Uventet slutning af fil fra server" i en meget specifik omstændighed.

Efter at have foretaget en anmodning, HTTPClient får en InputStream bundet til den stikkontakt, der er knyttet til anmodningen. Derefter afstemninger den InputStream gentagne gange, indtil det enten:

  1. Finder strengen "HTTP/1."
  2. Slutningen af ​​InputStream nås før 8 tegn er læst
  3. Finder en anden streng end "HTTP/1."

I tilfælde af nummer 2, HTTPClient vil kaste denne SocketException hvis et af følgende er sandt:

  • HTTP-metoden er CONNECT
  • HTTP-metoden er POST og klienten er indstillet til streamingtilstand

Hvorfor ville dette ske

Dette indikerer, at TCP-socket er blevet lukket, før serveren var i stand til at sende et svar. Dette kan ske af en række årsager, men nogle muligheder er:

  • Netværksforbindelsen gik tabt
  • Serveren besluttede at lukke forbindelsen
  • Noget mellem klienten og serveren (nginx, router osv.) afsluttede anmodningen

Bemærk:Når Nginx genindlæser sin konfiguration, lukker den med kraft alle HTTP Keep-Alive-forbindelser under flyvningen (selv POST'er), hvilket forårsager denne nøjagtige fejl.


Jeg får denne fejl, når jeg ikke indstiller godkendelseshovedet, eller jeg angiver forkerte legitimationsoplysninger.


Java tag