Aby uniknąć wyjątków podczas próby odwiązania i ponownego powiązania, należy ustawić każde utworzone gniazdo jako nadające się do ponownego użycia. Aby to zrobić, należy utworzyć niezwiązany Gniazdo:
DatagramSocket s = new DatagramSocket(null);
s.setReuseAddress(true);
s.bind(someSocketAddress);
Więcej informacji: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setReuseAddress(boolean)
PS: Limit czasu, który jest główną przyczyną wyjątku BindException w takich okolicznościach podczas korzystania z protokołu TCP, może nie dotyczyć gniazd UDP, ale SO_REUSE powinno umożliwić natychmiastowe ponowne powiązanie. http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html#setReuseAddress(boolean)
Oto kilka przykładów:
final int port = 55880;
a) Nie ponownego użycia, nie blisko = adres już w użytku
DatagramSocket s = new DatagramSocket(null);
s.bind(new InetSocketAddress("127.0.0.1", port));
s = new DatagramSocket(null);
s.setReuseAddress(true);
s.bind(new InetSocketAddress("localhost", port));
B) ponownego wykorzystania, bez bliskich = żadnych skarg
DatagramSocket s = new DatagramSocket(null);
s.setReuseAddress(true);
s.bind(new InetSocketAddress("127.0.0.1", port));
s = new DatagramSocket(null);
s.setReuseAddress(true);
s.bind(new InetSocketAddress("localhost", port));
C) nr ponowne blisko = bez dolegliwości (gniazdek datagramów o ylko)
DatagramSocket s = new DatagramSocket(null);
s.bind(new InetSocketAddress("127.0.0.1", port));
s.close();
s = new DatagramSocket(null);
s.bind(new InetSocketAddress("localhost", port));
s.close();
Czy można sprawdzić następujące: 1. Port 9999 jest bezpłatny IP2, 2. IP2 jest pingable 3. masz uprawnień dostępu do IP2. – NiranjanBhat