Как я могу установить размер буфера для нижнего сокета UDP? C #
Как мы знаем для получения UDP, мы используем Socket.ReceiveFrom или UdpClient.receive
Socket.ReceiveFrom принимает от вас байтовый массив для помещения данных udp.
UdpClient.receive возвращает непосредственно байтовый массив, в котором находятся данные
Мой вопрос заключается в том, как установить размер буфера внутри сокета. Я думаю, что ОС поддерживает свой собственный буфер для приема данных UDP, верно? например, если пакет udp отправляется на мою машину, ОС поместит его в буфер и будет ждать нас до Socket.ReceiveFrom или UdpClient.receive, верно?
Как я могу изменить размер этого внутреннего буфера?
Я пробовал Socket.ReceiveBuffSize, он никак не влияет на UDP, и он четко сказал, что это для окна TCP. Также я провел много экспериментов, которые доказывают, что Socket.ReceiveBufferSize НЕ для UDP.
Кто-нибудь может поделиться некоторыми взглядами на внутренний буфер UDP ???
Спасибо
Я видел несколько сообщений здесь, например,
http://social.msdn.microsoft.com/Forums/en-US/ncl/thread/c80ad765-b10f-4bca-917e-2959c9eb102a
Дейв сказал, что Socket.ReceiveBufferSize может установить внутренний буфер для UDP. Я не согласен.
Эксперимент, который я провел, выглядит так:
27 хостов одновременно отправляют мне пакет по 10 КБ в локальной сети (по крайней мере, почти). У меня есть цикл while для обработки каждого пакета. Для каждого пакета я создаю поток и обрабатываю его. Я использовал UdpClient или Socket для получения пакетов.
Я потерял около 50% пакетов. Я думаю, что это взрыв UDP, и я не могу обработать их все вовремя.
Вот почему я хочу увеличить размер буфера для UDP. скажем, если я изменю размер буфера на 1 МБ, то 27 * 10 КБ = 270 КБ данные могут быть приняты в буфере, верно?
Я попытался изменить Socket.ReceiveBufferSize на множество значений, и он просто не имеет никаких эффектов.
Кто-нибудь может помочь?