Java ServerSocket лимит подключения?
Я провел несколько тестов с сокетами и столкнулся с некоторым странным поведением: ServerSocket откажется от соединений после того, как к нему подключится 50-й клиентский сокет, даже если этот клиентский сокет будет закрыт до открытия следующего, и даже если задержка будет добавлено между соединениями.
Следующая программа - мой экспериментальный код, который в своем текущем состоянии не выдает никаких исключений и завершается нормально. Однако, если размер массиваSocket[] clients
больше 50, любые клиентские сокеты, пытающиеся подключиться после 50-го соединения, отклоняются серверным сокетом.
Вопрос:Почему 50 - число, при котором сокет-соединения отклоняются серверным сокетом?
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();
}
}
Я запустил тесты, где еще 50 сокетов подключаются к другому локальному серверу, и при открытии и закрытии 100 сокетов не возникало проблем, поэтому я 'Мы пришли к выводу, что сокет сервера не разрешает подключения, а не какой-либо предел открытия клиентских сокетов, но я не смог выяснить, почему сокет сервера ограничен 50 подключениями, даже если они не подключены одновременно.