2012-10-27 4 views
0

나는 클라이언트가 클라이언트 창을 닫고 클라이언트 프로그램을 종료했다는 신호를 보내는 데이터 바이트를 보내는 클라이언트 및 서버 응용 프로그램이 있습니다. 문제는 서버가 그를 삭제하기 전에 클라이언트에 마지막 알림을 보낼 수 있다는 것입니다. 서버가 블로킹 모드에서 SocketChannel의 write 메소드를 사용하면 무기한 차단되거나 간단히 무시됩니까? 연결이 끊어지기 전에 클라이언트가 "연결 해제 확인"을 기다려야합니까?그가 닫은 후에 SocketChannel을 통해 클라이언트에 데이터 보내기

답변

1

영원히 차단되지 않으며 무시되지 않습니다. 데이터를위한 소켓 보내기 버퍼가있을 경우 전혀 차단하지 않을 가능성이 큽니다. 블록을 실행하면 (자), IOException가 발생할 가능성이 있습니다. 즉, 「접속의 재접속」입니다. 이 예측은 없습니다. 상황이 잘못되어 발생하지 않아야합니다. 출력을 위해 양쪽 소켓을 닫고 EOS를 얻을 때까지 읽을 수 있도록 합의함으로써 상호 합의점을 얻을 수 있습니다. 양측이 같은 지점에 있고 닫을 수 있습니다.

1

마지막 질문에 "예"입니다. 클라이언트가 더 이상 응용 프로그램 수준의 데이터를 보내거나 읽지는 않지만 아직 최종 확인을 기다리고있는 상태를 포함하는 작별 프로토콜을 디자인하고 구현해야합니다.