Limit połączenia z serwerem Java ServerSocket?

Przeprowadziłem kilka testów z gniazdami i napotkałam jakieś dziwne zachowanie: ServerSocket odmówi połączeń po połączeniu się 50-go gniazda klienta, nawet jeśli to gniazdo klienta zostanie zamknięte przed otwarciem następnego, a nawet jeśli opóźnienie jest dodano między połączeniami.

Poniższy program jest moim eksperymentalnym kodem, który w obecnym stanie nie zgłasza żadnych wyjątków i kończy się normalnie. Jeśli jednak rozmiar tablicy wynosiSocket[] clients jest większa niż 50, każde gniazdo klienta próbujące nawiązać połączenie po 50. połączeniu jest odrzucane przez gniazdo serwera.

Pytanie:Dlaczego 50 punktów, w których połączenia z gniazdami są odrzucane przez gniazdo serwera?

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();
    }
}

Przeprowadziłem testy, w których kolejne 50 gniazd łączy się z innym serwerem lokalnym i nie wystąpił żaden problem z otwarciem i zamknięciem 100 gniazd, więc wywnioskowałem, że to gniazdo serwera odmawia połączeń, a nie ograniczenia otwierania gniazd klienta, ale Nie udało mi się ustalić, dlaczego gniazdo serwera jest ograniczone do 50 połączeń, nawet jeśli nie są połączone jednocześnie.

questionAnswers(4)

yourAnswerToTheQuestion