연결할 서버 목록이있는 GUI가 있습니다. 사용자가 서버를 클릭하면 연결됩니다. 사용자가 두 번째 서버를 클릭하면 첫 번째 서버를 연결 해제하고 두 번째 서버에 연결합니다. 프로그램이 다른 작업을 수행 할 수 있도록 새 연결이 각각 새 스레드에서 실행됩니다.연결 소켓을 중단하십시오
그러나 첫 번째 서버가 여전히 연결되어있는 상태에서 두 번째 서버를 클릭하면 두 개의 동시 연결이 있습니다.
Socket socket = new Socket();
socket.connect(socketAddress, connectTimeout);
내가 어쩌면 Thread.currentThread().interrupt();
작동 것이라고 생각하지만,하지 않았다 :
I)이이를 사용하여 연결하고, (연결 해요 블록은 라인입니다.
코드를 약간 수정하여 첫 번째 연결을 계속 만들지 만 곧바로 종료해야합니까? 또는 실제로 연결 메서드를 중단하는 방법이 있습니다.
내가 socket.close() 시도, 그것은 소켓이 null 말한다 .. 그러나 그것이 있어야 유효한 (그러나 연결되지 않은) Socket 객체입니다. disconnect()라는 메서드 내에서 같은 Runnable 클래스에서 close()를 호출하고 있는데, 다른 스레드에서 호출 한 이유는 무엇입니까? close()는 소켓에서 다른 스레드에서 직접 호출해야합니까? – Matt
@Matt : 코드를 보지 않고 말할 수는 없지만 확인하고 싶었습니다. 소켓 변수와 인스턴스 변수 또는 메소드가 하나입니까? Runnable 태스크의'socket' 속성이 null이 아닌 것은 확실합니까? 그렇다면, 태스크 객체에서 소켓 변수'volatile'을 시도하고 다시 시도 할 수 있습니까? 그것은 여전히 실패합니까? –