2012-07-23 3 views
2

Java에서 상당히 간단한 클라이언트/서버 응용 프로그램을 만들려고합니다. 클라이언트에는 두 개의 스레드가 있으며 서버에는 입력과 출력을위한 두 개의 스레드 (클라이언트 당)가 있습니다. 나는 두 가지 방법으로 데이터를 Object Streams에 보내고있다. Read() 블록. read() 쓰레드를 인터럽트 할 수 있어야한다. 어떻게해야합니까?Interruptible Socket Java 읽기

+0

이 [link] (http://www.roseindia.net/javatutorials/shutting_down_threads_cleanly.shtml)가 실제로 도움이 될 수 있다고 생각합니다. – Jasonw

+0

비 차단 읽기 소켓을 사용해 보셨습니까? 또한 루프를 끊임없이 검사하여 조건을 끊을 필요가있을 때 비 차단 읽기 반환 후에 연결을 끊을 수 있도록하려면? NIO 또는 setSoTimeout을 사용하여 비 블로킹 소켓을 만들 수 있습니다. –

답변

1

소켓을 감싸고있는 출력 스트림을 막기 만하면됩니다. 또한 플랫폼에서 차단되는 경우 읽기 제한 시간을 사용하고 리더가 이동할 때마다 연결 해제 플래그를 확인하도록하십시오.

1

Socket을 닫고 read 메서드는 IOException으로 중단됩니다. 그 예외를 처리하여 스레드를 정리하십시오.

0

비 차단 호출을 사용하거나 스레드에서 Interrupt method을 사용할 수 있습니다. 일단 인터럽트되면 읽기 연산은 스레드를 잡아서 멋지게 끝낼 수있는 예외를 발생시킵니다.

+1

소켓이 InterruptibleChannel 인 경우에만 해당됩니다. – EJP