Tengo una GUI con una lista de servidores para conectarme. Si un usuario hace clic en un servidor, se conecta a él. Si un usuario hace clic en un segundo servidor, desconectará el primero y se conectará al segundo. Cada nueva conexión se ejecuta en un nuevo hilo para que el programa pueda realizar otras tareas.Interrumpir un socket de conexión
Sin embargo, si un usuario hace clic en un segundo servidor mientras el primero todavía se está conectando, hay dos conexiones simultáneas.
Estoy conectando el uso de este, y conectar() es la línea que bloquea:
Socket socket = new Socket();
socket.connect(socketAddress, connectTimeout);
pensé que tal vez Thread.currentThread().interrupt();
quiere trabajar, pero no lo hicieron.
¿Tengo que reestructurar un poco mi código para que continúe haciendo la primera conexión, pero la cierre inmediatamente después? ¿O hay realmente una forma de interrumpir el método de conexión?
Cuando intento Socket.close(), se dice que toma es nula .. pero debe ser una válida (pero no conectado) Objeto de socket Estoy llamando a close() en la misma clase Runnable dentro de un método llamado disconnect(), que es llamado por otro hilo, ¿es por esto? ¿Tiene que invocarse close() en el socket directamente desde un hilo diferente? – Matt
@Matt: Sería difícil de decir sin echarle un vistazo al código, pero solo quería confirmarlo; es la variable de socket y la variable de instancia o un método con un alcance uno? ¿Estás seguro de que el atributo 'socket' de la tarea Runnable no es nulo? En caso afirmativo, ¿puedes tratar de hacer que la variable del socket sea 'volátil' en el objeto de la tarea e intentarlo de nuevo? ¿Todavía falla? –