Limite de connexion Java ServerSocket?
Je courais quelques tests avec des sockets, et j'ai rencontré un certain comportement étrange: Un ServerSocket va refuser les connexions après la 50e le Socket client se connecte à elle, même si ce client socket est fermée avant que l'autre est ouvert, et que, même si un délai est ajouté entre les connexions.
Le programme suivant est mon code expérimental, qui, dans son état actuel, déclenche pas d'exception et se termine normalement. Cependant, si la taille de la matrice de Socket[] clients
est augmentée au-delà de 50, tous les sockets client tente de se connecter après la 50e connexion refusée par le serveur de socket.
Question: Pourquoi est 50 le comte à qui les connexions socket-ci sont refusées par un serveur de socket?
public static void main(String[] args) {
try (ServerSocket server = new ServerSocket(2123)) {
Socket[] clients = new Socket[50];
for (int i = 0; i < clients.length; i++) {
clients[i] = new Socket("localhost", 2123);
System.out.printf("Client %2d: " + clients[i] + "%n", i);
clients[i].close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
J'ai exécuter des tests où un autre de 50 douilles de se connecter à un autre serveur local, et pas de problème avec 100 sockets être ouvert et fermé, donc j'en ai déduit que c'est la socket serveur refuse les connexions, et pas une certaine limite de l'ouverture de sockets client, mais j'ai été incapable de découvrir pourquoi le socket serveur est limité à 50 connexions, même s'ils ne sont pas connectés en même temps.
source d'informationauteur Vulcan
Vous devez vous connecter pour publier un commentaire.
Tout est dans le JavaDoc:
Apparemment, votre
ServerSocket
jamais accepte toutes les connexions, juste à l'écoute. Vous devez appeleraccept()
et de commencer la manipulation de la connexion ou de l'augmentation de la carnet de commandes de la file d'attente taille:50 est la valeur par défaut pour
backlog
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/ServerSocket.html#ServerSocket%28int%29
Voici un exemple qui fonctionne, en conformité avec @TomaszNurkiewicz réponse:
Deux choses que vous pouvez regarder