Этот код работает на моем Mac, даже если я настроил его запускать 40000 итераций.Я думаю, что вероятная проблема здесь заключается в том, что сокет не закрывается сразу в Windows, но опять же вы пытаетесь выполнить тысячи итераций в течение, вероятно, миллисекунд.
Следующий код будет постоянно повторяться и спатьнебольшое количество времени, чтобы показать, есть ли проблема задержки, когда сокет будет закрыт в течение некоторого промежутка времени:
long tCumulative = 0;
int errAt = -1;
System.out.println("start...");
for (int i = 0; i < 4000; i++) {
try {
errAt = i;
DatagramSocket result = new DatagramSocket(null);
result.bind(new InetSocketAddress(InetAddress.getLocalHost(), 9005));
result.close();
//success at last
tCumulative = 0;
} catch (Exception e) {
System.out.println("Error (at="+errAt+") (waited="+tCumulative+"ms): " + e.getMessage());
tCumulative+=50;
Thread.sleep(50);
i--;
}
}
System.out.println("end...");