2010-05-10 3 views
4

C#에서 소켓 연결이 종료되면 링크를 종료하기 전에 다른 노드에이를 알리고 따라서 원격 노드가 연결 상태를 업데이트 할 수 있습니다.Java 소켓 연결 해제보고 C# 연결 해제

Java에서 통신 링크를 종료하면 다른 노드는 연결을 계속 유효한 것으로보고합니다.

내가 읽는 동안 -1을 수신하면 연결이 끊어진 것으로보고하는 읽기 사이클을 구현해야합니다 (C#에서는 생각하지 않습니다).

통찰력에 감사드립니다.

편집 : 감사합니다. 둘 다. 내 게시물에서 연결 상태를 확인하기 위해 추가 검사가 필요하다고 생각하고 언급했습니다.

답변

0

java에서는 소켓 읽기/쓰기 또는 입력 스트림 상태 (예 : InputStream.available())를 쿼리 할 때만 닫히는 소켓의 다른 쪽 끝을 알 수 있습니다. 다른 쪽 끝이 닫혀있는 비동기 알림이 없다고 생각합니다.

소켓이 아직 열려 있는지 테스트하고 있습니까?

InputStream.available() 메서드를 폴링하여 -1을 반환하면 소켓이 닫혔음을 알 수 있습니다. 물론 사용법에 맞는 데이터를 읽을 수도 있습니다.

연결의 원격 측이 사라지면 해제가 감지 할 수있는 경우 InputStream.available()

+0

아니요, 지금은 아이디어를 가지고 놀고 있습니다. 이 문제는 C#과 다르게 작동하기 때문에 두드러졌습니다. – iTEgg

2

는, 일반적으로 당신이의 InputStream/InputChannel에서 IOException를 얻을 것이다 참조하십시오. 접속을 검출 할 수없는 경우, 소켓의 read가 타임 아웃했을 때에 IOException가 발생됩니다. 타임 아웃을 기다리는 시간은 Socket.setSoTimeout()을 사용하여 조정할 수 있습니다.