2013-05-15 2 views
1

C#에서 tcp 리스너를 생성했습니다. 시간 제한을 0으로 설정했습니다. 주말과 같이 청취자와 고객 사이에 약 50 시간 활동이 없지만 연결을 끊지 않는 경우. 죽는다약 50 시간 후에 Tcp Listener가 종료됩니다.

어떻게이 문제를 해결할 수 있습니까?

미리 감사드립니다.

+0

이 수신기를 호스팅하는 응용 프로그램에는 어떤 종류가 있습니까? OS에서 무언가 프로세스가 종료되었을 가능성이 있습니까? – David

+0

아니요, 프로세스가 아직 실행 중입니다. .NET 문제 또는 기타 항목이 확실하지 않습니다. –

+0

프로그램이 * 수신 대기 * 연결을 확인하거나 기존이지만 유휴 * 연결 *이 종료 된 경우 명확히하십시오. 또한 서비스 제공 업체 또는 네트워크의 신뢰할 수없는 사항을 배제하기 위해 두 시스템 간의 직접 유선 연결로 테스트 할 수 있습니까? 특정 타임 아웃을 결정하는 것이 도움이 될 수 있습니다. 즉 일관 적이거나 무작위입니까? 일정한 간격으로 활성 트래픽을 구현해야 할 수 있습니다. –

답변

0

라우터는 일반적으로 미리 설정된 시간 후에 유휴 TCP 연결을 중지합니다. 연결이 인터넷을 통해 이루어지면이 문제를 제어 할 수 없습니다. 이 문제를 프로그래밍 방식으로 방지하려면 유휴 연결을 감지하여 매우 작은 양의 정보 (예 : byte[] { 0 };)를 5 분마다 전송하십시오.

연결이 활성화되어있어 'keep alive packet'을 보내지 않은 것처럼 오버 헤드가 추가되지 않습니다.

다른 옵션은 `Socket.SetSocketOption'을 사용하여 기본 소켓에 'KeepAlive'옵션을 설정하는 것입니다. 이것은 동일한 기능을 수행해야하지만 항상 더 신뢰할 수있는 사용자 정의 솔루션을 발견했습니다.

+0

수신기에서 이러한 패킷을 정확히 보내는 방법은 무엇입니까? –

+0

@ 500-InternalServerError - 기본 TCPListener 소켓 또는 TcpListener.AcceptTcpClient를 통해 연결이 설정되면 수동으로 패킷을 보내는 사용자 지정 솔루션을 사용하는 것이 좋습니다. – MarcF

+0

내가 OP를 이해하는 방식으로이 때 클라이언트가 연결되어 있지 않습니다. –

관련 문제