Моя программа использует UdpClient, чтобы попытаться получить 27 ответов от 27 хостов. Размер ответа составляет 10 КБ. Моя широкополосная входящая пропускная способность составляет 150 КБ / с.
27 ответов отправляются с хостов почти одновременно и каждые 10 секунд.
Однако я могу получать только 8 - 17 ответов каждый раз. Количество ответов, которые я могу получить, довольно динамично, но в пределах диапазона.
Может кто-нибудь сказать мне, почему? почему я не могу получить все?
Я понимаю, что UDP не надежен. но я пытался получить 5-10 ответов одновременно, это сработало. Я думаю, что сетевые ссылки не так уж и плохи.
Код очень прост. На 27 хостах я просто использую UdpClient для отправки 10 КБ на мою машину.
На моей машине один UdpClient получает дейтаграммы. Каждый раз, когда я получаю данные, я создаю поток для их обработки (в основном обработка означает, что нужно просто распечатать «Я получил 10 КБ», но он выполняется в потоке).
listener = new UDPListener(Port);
listener.Start();
while (true) {
try {
UDPContext context = listener.Accept();
ThreadPool.QueueUserWorkItem(new WaitCallback(HandleMessage), context);
} catch (Exception) { }
}
Если я уменьшу размер ответа до 3 КБ, дело станет намного лучше, если будет получено примерно 25 ответов.
Есть еще идеи? Проблемы с буфером UDP ???