2016-06-28 3 views
1

NamedPipes을 통해 서로 통신하는 두 개의 응용 프로그램이 있습니다. 전화 번호는 appServer (서버)이고 appClient (클라이언트)입니다. 그들은 일정 시간 동안 데이터를 성공적으로 연결하고 전송합니다. 그런 다음 예기치 않게 appClient이 충돌합니다. 사용자가 다시 시작하고 파이프에 연결하려고 시도했지만 appServer은 여전히 ​​연결되어있어 새로운 연결을 수신하지 않는다고 생각합니다.예기치 않은 손실 또는 충돌 후 NamedPipeServerStream에 다시 연결

나는 현재 false.IsConnected)를 반환 클라이언트 측 (에 true으로 .IsConnected를 반환하는 서버 측 (에 NamedPipeServerStreamNamedPipeClientStream을 사용하고

내 질문은 이것이다 :. 어떻게 든 클라이언트를 얻을 수 있습니다 면 내가 분명히 또는 시간 제한하지만 운없이 .Connect을 시도했다? 다시 연결할 수 있습니다.

모든 팁은 감사합니다! 감사합니다!

편집 : 또 다른 유효한 (비록 바람직하지 않은) 옵션은 클라이언트가 '아직 거기에 있는지'확인하기 위해 기본적으로 '연결 테스트'를 수행하기 위해 서버 측에서 값싼 작업을 수행하는 것입니다. 누구든지이 중 하나를 알고 있습니까? 더미 메시지를 보내는 것 외에 나는 이것을하는 가장 좋은 방법이 확실치 않습니다. 나는이 옵션을 좋아하지 않는다. 왜냐하면 계속해서 일어날 것이지만 나는 모든 길을 따라 가야만한다.

+0

파이프가 끊어 지거나 연결이 끊어지면 서버 코드에 IOException이 발생해야합니다. 당신은 정말로 그것을 얻지 못하고 있습니까? 아마도 그것을 억압합니까? 당신은 클라이언트 프로세스가 종료되었는지 확신합니까? –

+0

테스트하는 동안 나는 프로세스를 명시 적으로 죽이는 사람입니다. 나는 던져진 어떤 예외도 보지 않고있다. 어디에서 던지기를 기대합니까? 서버는 기본적으로 기다리는 중입니다. '싼'예외를 명시 적으로 설정하기 위해 할 수있는 일이 있습니까? – tmwoods

+0

MSDN 설명서에 따르면 파이프가 손상된 경우 서버 코드에 IOException이 발생합니다. https://msdn.microsoft.com/en-us/library/bb546085(v=vs.110).aspx. 클라이언트가 충돌하거나 테스트를 위해 클라이언트를 종료하면 IOException이 발생할 것으로 예상됩니다. 보고있는 문제를 보여주는 작은 코드 예제를 게시 할 수 있습니까? –

답변

0

우리의 해결책은 다른 연결을 기다리는 두 번째 스레드를 시작하는 것이 었습니다. 그런 다음 클라이언트를 비교하여 동일한 클라이언트 인 경우 원본 서버 파이프를 닫고 재활용하여 깨끗하게 유지했습니다.

관련 문제