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

Код: 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
06.02.2014, 18:35
    #38552327
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP Сервер
...
Рейтинг: 0 / 0
07.02.2014, 11:36
    #38552993
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP Сервер
pation,

я отлично понимаю как устроен UDP, меня интересует как устроен класс UdpClient в .NET, а точнее его метод Receive. В некоторых примерах в инете я видел что этот метод вызывается одновременно несколькими потоками одновременно и потом они разбирают пакеты. Я хочу понять зачем это сделано, просто, чтобы параллельно обслуживать несколько источников данных или есть вероятность, что пока обрабатывается один пакет, следующий будет потерян если снова не вызвать метод Receive. Так же интересно что, если за это время придет 2 пакета. Попадут ли они в общий packege, или метод Receive надо будет вызвать 2 раза.
...
Рейтинг: 0 / 0
07.02.2014, 12:11
    #38553070
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP Сервер
palich12В некоторых примерах в инете я видел что этот метод вызывается одновременно несколькими потоками одновременно и потом они разбирают пакеты
а вы ссылки на эти примеры приложите, чтобы не обсуждать абстракции
...
Рейтинг: 0 / 0
07.02.2014, 13:56
    #38553356
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP Сервер
В общем, не найдя нужной информации, провел простой эксперимент
Код: 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
07.02.2014, 14:04
    #38553376
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UDP Сервер
Эксперимент неполный, не отработана ThreadSafe-модель :-)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / UDP Сервер / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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