Para evitar excepciones al intentar desvincular y volver a enlazar, configuraría cada socket creado como reutilizable. Con el fin de hacerlo, debe crear una toma de no unido:
DatagramSocket s = new DatagramSocket(null);
s.setReuseAddress(true);
s.bind(someSocketAddress);
Más información: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html#setReuseAddress(boolean)
P. S. El período de tiempo de espera que es la razón principal de una excepción BindException en tales circunstancias cuando se usa un TCP puede no aplicarse a los sockets UDP, pero el SO_REUSE debería permitirle volver a enlazar instantáneamente de todos modos. http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html#setReuseAddress(boolean)
Éstos son algunos ejemplos:
final int port = 55880;
a) no reutilización, no cerrar = Dirección ya en uso
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) Reciclar, sin cerrar = ninguna queja
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) Sin reutilización, cerrar = sin quejas (para conectores de datagrama o nly)
Ha comprobado lo siguiente: 1. el puerto 9999 es gratuito en IP2, 2. IP2 es activable 3. tiene permisos para acceder a IP2. – NiranjanBhat