1
KnockKnock 서버 예제를 통해 http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html으로 읽었으며 몇 가지 질문이 있습니다.자원 봉사 및 서버 소켓
try (ServerSocket serverSocket = new ServerSocket(portNumber)) {
while (listening) {
new KKMultiServerThread(serverSocket.accept()).start();
}
} catch (IOException e) {
System.err.println("Could not listen on port " + portNumber);
System.exit(-1);
}
내 질문 :
serverSocket
의 범위는 무엇입니까? 잡힌 예외 블록이나 주변 블록의 다른 곳에서 사용할 수 있습니까? 그렇지 않다면 소켓을 어떻게 안정적으로 닫을 수 있습니까?- 이 인스턴스에서 소켓은 어떻게 닫습니까? 이 샘플이 실행을 멈출 수있는 유일한 방법은 프로세스를 강제 종료하는 것이지만이 시점 이후에 열린 소켓은 어떻게됩니까? 사용중인 포트가 다른 응용 프로그램 (또는 동일한 응용 프로그램)에서 더 이상 사용 가능하지 않습니까?
new KKMultiServerThread
은 어떻게됩니까? 스레드가 작업을 완료하면이 스레드는 가비지 수집기에서 정리됩니까?
서버 소켓이 소멸자에서 닫히고 스레드가 '중지'됩니다. –
여기에 'serverSocket' 변수의 범위가 설명되어 있습니다. http://stackoverflow.com/questions/18691352/try-with-resources-scope-of-resource – FGreg
@JeroenBollen Java에는 소멸자가 없습니다. – EJP