Я запускал несколько тестов с сокетами, и я столкнулся с каким-то странным поведением: ServerSocket откажется от соединений после того, как 50-й клиент Socket подключится к нему, даже если этот клиентский сокет закрыт до того, как откроется следующий, и даже если между соединениями добавляется задержка.
Следующая программа - это мой экспериментальный код, который в своем текущем состоянии не отменяет никаких исключений и обычно заканчивается. Однако, если размер массива 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 соединениями, хотя они не подключены одновременно.