Stavo eseguendo alcuni test con i socket e ho riscontrato un comportamento strano: un ServerSocket rifiuterà le connessioni dopo che il 50th client Socket si è connesso ad esso, anche se quel socket client è stato chiuso prima che il successivo sia aperto, e anche se un il ritardo viene aggiunto tra le connessioni.Limite di connessione Java ServerSocket?
Il seguente programma è il mio codice sperimentale, che nel suo stato attuale non emette eccezioni e termina normalmente. Tuttavia, se la dimensione dell'array di Socket[] clients
viene aumentata oltre 50, tutti i socket client che tentano di connettersi dopo la 50ª connessione vengono rifiutati dal socket del server.
Domanda: Perché 50 è il conteggio con cui le connessioni socket vengono rifiutate da un socket del server?
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();
}
}
Ho eseguito test dove altri 50 prese connettono a un altro server locale, e nessun problema si è verificato con 100 prese vengono aperte e chiuse, così ho dedotto che la sua presa server rifiuta connessioni, e non alcuni limiti di apertura dei socket client, ma non sono stato in grado di scoprire perché il socket del server è limitato a 50 connessioni, anche se non sono connesse simultaneamente.
Le connessioni in coda non verrebbero rimosse quando i socket client sono chiusi? – Vulcan
@Vulcan Chiaramente no. – EJP
@EJP Sì, ma perché non dovrebbero?A me sembra strano che le prese chiuse rimangano in attesa di connessione. Immagino che non ci sia modo per il socket del server di sapere che il socket client è chiuso. – Vulcan