NamedPipes
을 통해 서로 통신하는 두 개의 응용 프로그램이 있습니다. 전화 번호는 appServer
(서버)이고 appClient
(클라이언트)입니다. 그들은 일정 시간 동안 데이터를 성공적으로 연결하고 전송합니다. 그런 다음 예기치 않게 appClient
이 충돌합니다. 사용자가 다시 시작하고 파이프에 연결하려고 시도했지만 appServer
은 여전히 연결되어있어 새로운 연결을 수신하지 않는다고 생각합니다.예기치 않은 손실 또는 충돌 후 NamedPipeServerStream에 다시 연결
나는 현재 false
로 .IsConnected
)를 반환 클라이언트 측 (에 true
으로 .IsConnected
를 반환하는 서버 측 (에 NamedPipeServerStream
및 NamedPipeClientStream
을 사용하고
내 질문은 이것이다 :. 어떻게 든 클라이언트를 얻을 수 있습니다 면 내가 분명히 또는 시간 제한하지만 운없이 .Connect
을 시도했다? 다시 연결할 수 있습니다.
모든 팁은 감사합니다! 감사합니다!
편집 : 또 다른 유효한 (비록 바람직하지 않은) 옵션은 클라이언트가 '아직 거기에 있는지'확인하기 위해 기본적으로 '연결 테스트'를 수행하기 위해 서버 측에서 값싼 작업을 수행하는 것입니다. 누구든지이 중 하나를 알고 있습니까? 더미 메시지를 보내는 것 외에 나는 이것을하는 가장 좋은 방법이 확실치 않습니다. 나는이 옵션을 좋아하지 않는다. 왜냐하면 계속해서 일어날 것이지만 나는 모든 길을 따라 가야만한다.
파이프가 끊어 지거나 연결이 끊어지면 서버 코드에 IOException이 발생해야합니다. 당신은 정말로 그것을 얻지 못하고 있습니까? 아마도 그것을 억압합니까? 당신은 클라이언트 프로세스가 종료되었는지 확신합니까? –
테스트하는 동안 나는 프로세스를 명시 적으로 죽이는 사람입니다. 나는 던져진 어떤 예외도 보지 않고있다. 어디에서 던지기를 기대합니까? 서버는 기본적으로 기다리는 중입니다. '싼'예외를 명시 적으로 설정하기 위해 할 수있는 일이 있습니까? – tmwoods
MSDN 설명서에 따르면 파이프가 손상된 경우 서버 코드에 IOException이 발생합니다. https://msdn.microsoft.com/en-us/library/bb546085(v=vs.110).aspx. 클라이언트가 충돌하거나 테스트를 위해 클라이언트를 종료하면 IOException이 발생할 것으로 예상됩니다. 보고있는 문제를 보여주는 작은 코드 예제를 게시 할 수 있습니까? –