2011-03-14 6 views
0

Windows XP를 실행하는 컴퓨터에 지속적인 UDP 패킷 스트림이 있습니다. 어떤 시점에서 수신 된 UDP 패킷을 처리하는 리스너 (C#으로 작성)를 시작합니다.XP에서 C#의 UDP 버퍼

청취자를 시작할 때 청취자가 버퍼로 인해 시작된 패킷을 받을지, 아니면 청취자에게 들어가는 첫 번째 패킷이 실제로 청취자 이후에 수신 된 첫 번째 패킷인지 확신 할 수 있습니까? 시작됐다?

답변

4

UDP 배송은 도착하기 위해 한 번만 도착하거나, 이 도착하기까지 일정 시간 후에 도착하지 않을 수도 있습니다 ().

따라서, 당신은 또한 당신이 포트에 듣기 시작 전에 전송 된 UDP 패킷을 처리 할 필요가 있지만, 어떤 이유로 세계 여행을 가고 후 듣기 시작 때까지 도착하지 않은 것입니다.

대부분의 O/S 구현에서 UDP 패킷이 포트에 도착하면 (그리고 브로드 캐스트되지 않음) 해당 포트에서 UDP를 수신하는 사람이 없으면 패킷이 삭제됩니다. 그러나 UDP 패킷이 O/S에 도착하여 네트워크 드라이버의 내부 버퍼 에 큐에 넣을 가능성이 있습니다. 전에 청취자가 시작할 때 O/S가 처리 할 수있는 기회가 있습니다. 그럼 너도 볼거야.

일반적으로 UDP 패킷으로부터 오는 신뢰할만한 어떠한 것을 가정하지 마십시오.

+0

그건 내가 두려워했던거야. O/S 레벨에서 버퍼를 비우는 방법이 있습니까? – lejon

+0

네트워크 카드의 장치 드라이버에만 도착한시기가 아닙니다. 왜 결정론적인 것을 필요로하지만 UDP와 함께 갈 것을 선택한 특별한 이유가 있습니까? 작업에 잘못된 도구를 사용하고있는 것 같습니다. –

+0

UDP 패킷을 연속적으로 스트리밍하는 상용 제품입니다. 나는이 문제에 대해 선택의 여지가 없다. 그리고 나는 언제 어떻게 패킷이 수신되는지를 추정해야한다. – lejon

관련 문제