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.