powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UDP Сервер
6 сообщений из 6, страница 1 из 1
UDP Сервер
    #38552161
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте уважаемые коллеги!
Собственно задача, есть серверный поток слушающий порт

Код: c#
1.
2.
3.
4.
5.
internal UdpClient Listener;
...
IPEndPoint rep = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 1);
...
packege = Listener.Receive(ref rep);



Сейчас все работает нормально, но боюсь что с ростом нагрузки могут возникнуть проблемы.
1) Что если, например пока первый полученный пакет не будет обработан, придет второй. О просто будет ждать пока снова не будет вызван метод Listener.Receive(ref rep); или будет потерян?
2) Что если придут почти одновременно два пакета? Один из них будет потерян? Или они оба подряд будут помещены в packege? Или первый пакет будет помещён в packege, а второй останется ждать второго вызова Listener.Receive(ref rep);?
...
Рейтинг: 0 / 0
UDP Сервер
    #38552327
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
UDP Сервер
    #38552993
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pation,

я отлично понимаю как устроен UDP, меня интересует как устроен класс UdpClient в .NET, а точнее его метод Receive. В некоторых примерах в инете я видел что этот метод вызывается одновременно несколькими потоками одновременно и потом они разбирают пакеты. Я хочу понять зачем это сделано, просто, чтобы параллельно обслуживать несколько источников данных или есть вероятность, что пока обрабатывается один пакет, следующий будет потерян если снова не вызвать метод Receive. Так же интересно что, если за это время придет 2 пакета. Попадут ли они в общий packege, или метод Receive надо будет вызвать 2 раза.
...
Рейтинг: 0 / 0
UDP Сервер
    #38553070
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12В некоторых примерах в инете я видел что этот метод вызывается одновременно несколькими потоками одновременно и потом они разбирают пакеты
а вы ссылки на эти примеры приложите, чтобы не обсуждать абстракции
...
Рейтинг: 0 / 0
UDP Сервер
    #38553356
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, не найдя нужной информации, провел простой эксперимент
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
UdpClient Cl;
        int Count = 1;
        private void Button_Click_3(object sender, RoutedEventArgs e)
        {

            Cl = new UdpClient(new IPEndPoint(IPAddress.Any, 1002));
            Cl.AllowNatTraversal(true);

        }

        private void Button_Click_4(object sender, RoutedEventArgs e)
        {

            byte[] s = new byte[1];
            s[0] = (byte)Count;
            Cl.Send(s, s.Length, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1002));
            
        }

        private void Button_Click_5(object sender, RoutedEventArgs e)
        {
            IPEndPoint rep = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 1);
            byte[] packege; 
            packege = Cl.Receive(ref rep);
            MessageBox.Show(packege.Length.ToString());
            
            
        }


Из которого стало ясно что если несколько раз отправить пакеты, то получить их можно, вызывая метод получения столько же раз. При этом можно сначала отправить, а только потом, вызвать метод получения.
Соответсвенно ответы на вопросы:
1) Хранит полученные пакеты в некой внутренней очереди не зависимо от того, вызван метод Receive или нет
2) отдает пакеты по одному при вызове Receive. Сколько пакетов получено, столько же раз нужно вызвать Receive
...
Рейтинг: 0 / 0
UDP Сервер
    #38553376
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эксперимент неполный, не отработана ThreadSafe-модель :-)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UDP Сервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]