2012-08-24 4 views
2

클라이언트 응용 프로그램이 소켓을 닫거나 서버를 종료해도 서버는 여전히 작동한다고 생각합니다. 나는 심지어 TcpClient.Connected을 확인한다. 나는 이것을 본다. 나는 중요한 부분을 굵은TcpClient가 연결되어 있는지 어떻게 확인합니까?

진정한 클라이언트 소켓이 원격 리소스 가장 최근의 작업의 같은 에 연결된 경우; 그렇지 않으면 false입니다.

소켓이 닫혀 있는지 어떻게 알 수 있습니까? 현재 작업을 수행하고 예외가 발생하여 열리거나 닫히는 경우를 발견해야합니다.

답변

1

소켓을 통해 통신을 끊을 수있는 많은 것들이 있으며, 그 중 많은 것이 완전히 제어 할 수 없으므로 .

현재로서는 완벽하게 수용 할 수있는 감지 메커니즘이 있습니다. 간단하고 비용이 적게 듭니다.

당신은 심장 박동을 할 수 있고, 나는 모든 X somethings에서 클라이언트로부터 메시지를 보내고, 서버를 실행시키고 X * fiddle factor 간격 동안 하나도 없었는지를 볼 수 있습니다. 프로세서 시간과 대역폭을 사용합니다.

다른 옵션은 더 이상 연결되어 있지 않음을 감지하고 새 연결을 요청하는 클라이언트에 따라 다릅니다. 요청에 고유 한 식별자가있는 경우 기존 연결을 통해 실행하고 종료 할 수 있으며 종료 된 경우 정상적으로 계속 시작할 수 있습니다.

나는 예외가 옳다고 생각하지 않는다는 것을 알고 있지만 연결을 계속 잃어 버리면 문제가 발생합니다. 만약 당신이 노력했다면 그것을 해결하는 것이 더 낫습니다.

관련 문제