Notre projet implémente la base de cadre de connexion longue sur NIO pour push, il fonctionnait normalement. Ces derniers temps, il y a un problème, "SocketChannel.read (ByteBuffer)" exception throw "java.net.SocketException: recvfrom a échoué: ECONNRESET (réinitialisation de connexion par les pairs)", détails sont les suivants: pourquoi SocketChannel invoque read (byteBuffer) throw java.net.SocketException: recvfrom échoue: ECONNRESET (Connexion réinitialisée par homologue)
l'image contient un message d'erreur
le code d'erreur comme suit:
private void read(ByteBuffer byteBuffer, int length) throws Exception {
int count = 0;
long readBeginMills = SystemClock.elapsedRealtime();
while (count < length) {
try {
int readCount = mSocketChannel.read(byteBuffer);
long nowMills = SystemClock.elapsedRealtime();
if (readCount > 0) {
count += readCount;
readBeginMills = nowMills;
}
//1.readCount为-1时是连接断开了,直接报错重连
//2.如果读取数据超过了20s也报错重连
if(nowMills - readBeginMills >= 20000 || readCount == -1){
throw new LostTcpByteException("byte lost exception,need to shutdown and reconnection");
}
} catch (Exception e) {
throw e;
}
}
}
J'ai cherché beaucoup d'erreur semblable, bu t pas trouver une bonne idée pour résoudre le problème, comment puis-je faire? Merci pour l'une de vos réponses!
exception jeter à partir de cette ligne "int readCount = mSocketChannel.read (byteBuffer);" –