Как мы знаем для получения 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 на множество значений, но он просто не имеет эффектов.
Кто-нибудь может помочь?