Quand est " java.io.IOException: connexion réinitialisée par peer " lancée?
ERROR GServerHandler - java.io.IOException: Connection reset by peer
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:323)
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:282)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:202)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
ce log est à partir d'un serveur de jeux implémenté en utilisant netty. Qu'est-ce qui peut causer cette exception ?
6 réponses
java.io.IOException: connexion réinitialisée par peer
l'autre partie a brusquement interrompu la connexion au milieu d'une transaction. Cela peut avoir de nombreuses causes qui ne sont pas contrôlables du côté du serveur sur. Par exemple: l'utilisateur final a décidé d'arrêter le client ou de changer le serveur brusquement tout en interagissant avec votre serveur, ou le programme client s'est écrasé, ou la connexion internet de l'utilisateur final est tombée en panne, ou la machine de l'utilisateur final s'est écrasée, etc, etc.
pour développer la réponse de BalusC, n'importe quel scénario où l'expéditeur continue à écrire après que le pair a cessé de lire et fermé sa prise produira cette exception. En d'autres termes, une erreur de protocole d'application. Par exemple, si vous écrivez quelque chose au pair que le pair ne comprend pas, et puis il ferme sa socket en signe de protestation, et vous continuez alors à écrire, la pile TCP du Pair émettra un RST, ce qui entraîne cette exception et ce message à l'expéditeur.
java.io.IOException dans Netty signifie que votre serveur de jeu essaie d'envoyer des données à un client, mais ce client a une connexion fermée à votre serveur.
Et cette exception n'est pas le seul! Il y en a plusieurs autres. Voir BadClientSilencer dans Xitrum. J'ai dû ajouter ça pour empêcher ces erreurs de salir mon fichier journal.
Pour moi, utiles code de la sorcière m'aider http://rox-xmlrpc.sourceforge.net/niotut/src/NioServer.java
/ / la télécommande a forcé la fermeture de la connexion, annuler
// la touche de sélection et fermer le canal.
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;
}
...
il y a beaucoup de facteurs , d'abord voir si le serveur renvoie le résultat, puis vérifier entre le serveur et le client.
rectifiez-les du côté du serveur d'abord, puis vérifiez la condition d'écriture entre le serveur et le client !
côté serveur rectifier les temps morts entre le datalayer et le serveur côté client, rectifiez le délai et le nombre de connexions disponibles !
je pense que cela devrait être de java.net.Exception socketexception que sa définition est indiqué pour un TCP erreur.
/**
* Thrown to indicate that there is an error in the underlying
* protocol, such as a TCP error.
*
* @author Jonathan Payne
* @version %I%, %G%
* @since JDK1.0
*/
public
class SocketException extends IOException {