Wanneer wordt “java.io.IOException:Verbinding gereset door peer” gegenereerd?

Dit logboek is afkomstig van een gameserver die is geïmplementeerd met Netty. Wat kan deze uitzondering veroorzaken?


Antwoord 1, autoriteit 100%

java.io.IOException: verbinding opnieuw ingesteld door peer

De andere kant heeft de verbinding abrupt afgebroken tijdens een transactie. Dat kan vele oorzaken hebben die vanaf de serverkant niet beheersbaar zijn. bijv. de eindgebruiker heeft besloten de client af te sluiten of de server abrupt te wijzigen terwijl er nog interactie is met uw server, of het clientprogramma is gecrasht, of de internetverbinding van de eindgebruiker is uitgevallen, of de computer van de eindgebruiker is gecrasht, enz.


Antwoord 2, autoriteit 22%

Om het antwoord van BalusC uit te breiden: elk scenario waarin de afzender blijft schrijven nadat de peer is gestopt met lezen en zijn socket heeft gesloten, zal deze uitzondering produceren, net als de peer die sluit terwijl hij nog ongelezen gegevens in zijn eigen socket-ontvangstbuffer had. Met andere woorden, een applicatieprotocolfout. Als u bijvoorbeeld iets naar de peer schrijft dat de peer niet begrijpt, en dan sluit hij zijn socket uit protest, en u gaat dan verder met schrijven, dan zal de TCP-stack van de peer een RST afgeven, wat resulteert in deze uitzondering en het bericht bij de afzender.


Antwoord 3, autoriteit 4%

java.io.IOException in Netty betekent dat uw gameserver gegevens naar een client probeert te verzenden, maar dat die client de verbinding met uw server heeft verbroken.

En die uitzondering is niet de enige! Er zijn er nog meer. Zie BadClientSilencerin Xitrum. Ik moest dat toevoegen om te voorkomen dat die fouten mijn logbestand verpesten.


Antwoord 4

java.io.IOException: verbinding opnieuw ingesteld door peer

In mijn geval was het probleem met PUT-verzoeken (GET en POST waren succesvol).

Communicatie ging via VPN-tunnel en ssh-verbinding. En er was een firewall met standaardbeperkingen voor PUT-verzoeken… PUT-verzoeken zijn niet overal doorgestuurd, naar de server…

Probleem werd opgelost nadat een uitzondering was toegevoegd aan de firewall voor mijn IP-adres.


Antwoord 5

Het kan ook betekenen dat de server volledig ontoegankelijk is – ik kreeg dit toen ik probeerde een server te bereiken die offline was

Mijn client was geconfigureerd om verbinding te maken met localhost:3000, maar er draaide geen server op die poort.


Antwoord 6

Voor mij was de nuttige code die mij hielp http://rox-xmlrpc. sourceforge.net/niotut/src/NioServer.java

// De afstandsbediening heeft de verbinding met geweld verbroken, annuleer

// de selectietoets en sluit het kanaal.

   private void read(SelectionKey key) throws IOException {
            SocketChannel socketChannel = (SocketChannel) key.channel();
            // Clear out our read buffer so it's ready for new data
            this.readBuffer.clear();
            // Attempt to read off the channel
            int numRead;
            try {
                numRead = socketChannel.read(this.readBuffer);
            } catch (IOException e) {
                // The remote forcibly closed the connection, cancel
                // the selection key and close the channel.
                key.cancel();
                socketChannel.close();
                return;
            }
            if (numRead == -1) {
                // Remote entity shut the socket down cleanly. Do the
                // same from our end and cancel the channel.
                key.channel().close();
                key.cancel();
                return;
            }
...

Antwoord 7

Er zijn veel factoren, kijk eerst of de server het resultaat retourneert en vervolgens tussen server en client controleert.

RECTIFEREN TERUGELIJKS VAN DE SERVERZIJDE, Controleer vervolgens de schrijfconditie tussen server en client!

Server Side Rectificeer de tijds-outs tussen de Datalayer en Server
Van klantzijde Corrigeer de time-out en het aantal beschikbare verbindingen!

Other episodes