2010-05-07 2 views
3

우리는 클라이언트 응용 프로그램에 밀어 넣기 기능을 제공하기 위해 Android 클라이언트와 소켓 채널을 열어 놓는 Java 서버를 가지고 있습니다.닫아야 할 Java 소켓 채널에 쓰기가 예외를 생성하지 않습니다.

그러나 안드로이드를 비행기 모드로 설정 한 후 연결을 끊을 것으로 예상 했는데도 서버는 여전히 Android 클라이언트와 연결된 SocketChannel 객체에 쓸 수 있으며 오류는 발생하지 않습니다. 그것에 기입하기 전에 SocketChannel.isConnected()를 호출하면 (자) true가 돌려 주어집니다.

무엇이 누락 되었습니까? 휴대 기기와 소켓의 처리가 다른가요?

미리 도움을 주셔서 감사합니다.

답변

1

SocketChannel.socket().isConnected()SocketChannel.isConnected() 소켓이 연결되기 전에 false가 반환됩니다. 소켓이 연결되면 true를 반환하고 어떤 이유로 든 false로 되돌아 가지 않습니다. 사실

SocketChannel.isOpen() 반환 당신은 SocketChannel.socket().close() 또는 SocketChannel.close() 호출 할 때까지. 이 소켓에서 close()를 호출하면 SocketChannel.isOpen()은 false를 반환하고 은 false를 반환합니다. 거짓

SocketChannel.socket().isClosed() 반환 당신은 SocketChannel.socket().close() 또는 SocketChannel.close() 호출 할 때까지. 소켓에 close()을 호출하면 SocketChannel.socket().isClosed()SocketChannel.socket().isClosed()이 true를 반환합니다. 다른 이벤트가 없으면 true를 반환합니다.

관련 문제