Как установить ReceiveBufferSize для UDPClient? или есть смысл ставить? C #

Я реализую передачу данных UDP. У меня есть несколько вопросов о буфере UDP.

Я использую UDPClient для отправки / получения UDP. а моя широкополосная полоса пропускания составляет 150 КБ / с (байтов / с, а не бит / с).

  1. Я отправляю датаграмму 500B на 27 хостов

  2. 27 хостов отправляют обратно датаграмму размером 10 КБ, если они получают.

  3. Итак, я должен получить 27 ответов, верно? однако вместо этого я получаю в среднем только 8–12.

  4. Затем я попытался уменьшить размер ответа до 500 Байт, да, я получаю все.

Моя мысль заключается в том, что если все 27 хостов отправят ответ по 10 КБ почти одновременно, входящий трафик будет составлять 270 КБ / с (вероятно), что превышает мою входящую пропускную способность, поэтому происходит потеря. Я прав?

Но я думаю, даже если входящий трафик превышает пропускную способность, должна ли Windows помещать датаграмму в буфер и ждать получения?

Затем я подозреваю, что, возможно, ReceiveBufferSize моего UdpClient слишком мал? по умолчанию это 8092В ??

Я не знаю, в порядке ли я в этом отношении. Пожалуйста, помогите мне.


person Jack    schedule 08.03.2010    source источник
comment
Датаграмма 500 ГБ? Что вы могли бы послать, ваш жесткий диск?   -  person Gbps    schedule 10.06.2010


Ответы (1)


Протокол UDP не гарантирует доставку пакетов, вам следует переключиться на TCP, если вам необходимо гарантировать доставку пакетов.

UDP лучше подходит для приложений, в которых потеря пакета лучше, чем ожидание, пока пакет найдет путь к вам. т.е. потоковое мультимедиа или что-то подобное.

Дополнительную информацию см. В wikipedia.

person Nate    schedule 10.06.2010