Windows XP를 실행하는 컴퓨터에 지속적인 UDP 패킷 스트림이 있습니다. 어떤 시점에서 수신 된 UDP 패킷을 처리하는 리스너 (C#으로 작성)를 시작합니다.XP에서 C#의 UDP 버퍼
청취자를 시작할 때 청취자가 버퍼로 인해 시작된 패킷을 받을지, 아니면 청취자에게 들어가는 첫 번째 패킷이 실제로 청취자 이후에 수신 된 첫 번째 패킷인지 확신 할 수 있습니까? 시작됐다?
Windows XP를 실행하는 컴퓨터에 지속적인 UDP 패킷 스트림이 있습니다. 어떤 시점에서 수신 된 UDP 패킷을 처리하는 리스너 (C#으로 작성)를 시작합니다.XP에서 C#의 UDP 버퍼
청취자를 시작할 때 청취자가 버퍼로 인해 시작된 패킷을 받을지, 아니면 청취자에게 들어가는 첫 번째 패킷이 실제로 청취자 이후에 수신 된 첫 번째 패킷인지 확신 할 수 있습니까? 시작됐다?
UDP 배송은 도착하기 위해 한 번만 도착하거나, 이 도착하기까지 일정 시간 후에 도착하지 않을 수도 있습니다 ().
따라서, 당신은 또한 당신이 포트에 듣기 시작 전에 전송 된 UDP 패킷을 처리 할 필요가 있지만, 어떤 이유로 세계 여행을 가고 가 후 듣기 시작 때까지 도착하지 않은 것입니다.
대부분의 O/S 구현에서 UDP 패킷이 포트에 도착하면 (그리고 브로드 캐스트되지 않음) 해당 포트에서 UDP를 수신하는 사람이 없으면 패킷이 삭제됩니다. 그러나 UDP 패킷이 O/S에 도착하여 네트워크 드라이버의 내부 버퍼 에 큐에 넣을 가능성이 있습니다. 전에 청취자가 시작할 때 O/S가 처리 할 수있는 기회가 있습니다. 그럼 너도 볼거야.
일반적으로 UDP 패킷으로부터 오는 신뢰할만한 어떠한 것을 가정하지 마십시오.
그건 내가 두려워했던거야. O/S 레벨에서 버퍼를 비우는 방법이 있습니까? – lejon
네트워크 카드의 장치 드라이버에만 도착한시기가 아닙니다. 왜 결정론적인 것을 필요로하지만 UDP와 함께 갈 것을 선택한 특별한 이유가 있습니까? 작업에 잘못된 도구를 사용하고있는 것 같습니다. –
UDP 패킷을 연속적으로 스트리밍하는 상용 제품입니다. 나는이 문제에 대해 선택의 여지가 없다. 그리고 나는 언제 어떻게 패킷이 수신되는지를 추정해야한다. – lejon