'Eine bestehende Verbindung wurde von der Software Ihres Host-Rechners abgebrochen', wenn Sie java nio socket verwenden

9

Ich hatte einen Java-Server mit Java nio sockets entwickelt. Es ist der Code meiner Anwendung:

%Vor%

}

Wenn ich mit 2-3 Clients teste, funktioniert es gut, aber als ich es mit ca. 100-300 Client getestet habe, bin ich mehrmals unter Ausnahme gelandet (Tatsächlich ist es passiert in write() Methode und Zeile socketChannel.write(dummyResponse); :

%Vor%

und dann kann ich keine Nachrichten vom Server empfangen.

    
Husein Behboodi Rad 14.01.2015, 11:39
quelle

1 Antwort

4

Wenn Sie das Ende des Streams erhalten ( read() gibt -1 zurück), schließen Sie den Kanal nicht, so dass Kanäle verloren gehen. Sie müssen den Kanal schließen und beachten, dass dadurch der Schlüssel automatisch gelöscht wird. Es genügt nicht, den Schlüssel allein zu löschen. Gleiches, wenn Sie den Schlüssel abbrechen, weil clientNumber == null oder Sie IOException erhalten.

NB: Sie sollten OP_WRITE nicht registrieren, es sei denn, Sie haben gerade eine Null von einem write() -Aufruf erhalten, und Sie sollten es abmelden, wenn Sie diese Null nicht erhalten.

    
EJP 25.01.2015, 03:23
quelle

Tags und Links