2012-09-16 4 views
0

내 SwingWorker의의 doInBackground()가 생성 이미 때 ServerSocketChannel을 다시 시작 주어진 연결 신선한 ServerSocketChannel 사용자가 "연결"버튼을 클릭 할 때.처리 클라이언트가 열려

클라이언트가 isAcceptable() 인 경우 SwingWorkerSocketChannelOP_READ으로 등록합니다.

사용자가 "연결 해제"버튼을 클릭하면 SwingWorkerServerSocketChannelselector()을 닫습니다. 그러나 클라이언트는 아직 열려 있습니다.

문제점 : 사용자가 다시 "연결"을 클릭하면 클라이언트가 여전히 OP_READ 모드이고 ServerSocketChannel에 의해 새롭게 승인되지 않는다는 것을 제외하면 위의 프로세스가 반복됩니다.

이 문제를 극복 할 방법이 있습니까? ServerSocketChannel 다시 시작해야 클라이언트가 다시 시작해야합니까?

+0

나는 이것에 대해 이해하지 못한다. 왜 서버용 GUI를 작성하고 있습니까? 왜 사용자는 ServerSocket이 생성 될 때 제어 할 수 있습니까? 사용자가 연결 해제 버튼을 클릭하면 반드시 서버 소켓이 아닌 클라이언트 연결을 닫아야합니다. 그런데 왜 다시 사용자가 제어 할 수 있습니까? – EJP

+0

@EJP 왜 서버 소프트웨어의 사용자가 서버를 시작하고 중지해야하는지 알 수없는 이유는 무엇입니까? – Arvanem

+0

@EJP하지만 클라이언트 연결을 종료해야한다는 제안을 게시합니다. – Arvanem

답변

1

ServerSocketChannel을 다시 시작하려면 클라이언트를 다시 시작해야합니까?

아니요. 기존 클라이언트가 계속 연결되어 있습니다. 그들은 당신이 서버 소켓을 닫았 기 때문에 다른 연결 단계를 거치지 않을 것이다.

위의 내 의견과 달리 연결 끊기 단추는 클라이언트 소켓이 아니라 서버 소켓을 닫아야합니다. 그러나 그것은 틀렸어. 버튼은 '시작'및 '중지'또는 '듣기 시작'및 '듣기 중지'이어야합니다. 연결하는 클라이언트입니다.

+0

수정 해 주셔서 감사합니다. 귀하의 의견에. 나는 지금 청취를 시작하거나 중지하기로 선택한 서버 애플리케이션의 사용자에게 어떤 점이 있는지 의심 스럽다. – Arvanem