Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рестарт Udp Сервера 
:(
    Опции темы
DenwerD
Дата 25.2.2009, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



Доброго времени суток.
Пишу Udp сервер(UdpServer) принимающей частью служет System.Net.UdpClient - создаётся он в конструкторе UdpServer.  Даннные на UdpClient принимается асинхронно.

У UdpServer есть метод Start() который запускает метод UdpClient.BeginReceive
Так же у UdpServer есть метод Restart который должен если произошли изминения (например порт сменился) должен пересоздать UdpClent

Вот метод Restart
Код

        try
             {
                
                this.udpClient.Client.Shutdown(System.Net.Sockets.SocketShutdown.Both);
                this.udpClient.Close();
                
                this.udpClient = new System.Net.Sockets.UdpClient(this.localEndPoint);

                this.udpClient.BeginReceive(new AsyncCallback(this.udpReceiveMessageCallback), null);
                
            }
            catch (System.Net.Sockets.SocketException se)
            {
                this.OnSocketError(se);
            }
            catch (Exception e)
            {
                this.OnServerError(e);
            }

 
В результате его вызова генерируется исключение в следующем методе
Код

private void udpReceiveMessageCallback(IAsyncResult aResult)
        {

            try
            {
                  //здесь возникает исключение
                 //Объект IAsyncResult не был возвращен соответствующим
// асинхронным методом данного  класса.   Имя параметра: asyncResult
                 
                  Byte[] receivedBytes = this.udpClient.EndReceive(aResult, ref this.remoteEndPoint);

                string receiveString = Encoding.ASCII.GetString(receivedBytes);

            }
            catch (System.Net.Sockets.SocketException se)
            {
                //генерируем событие об ошибке сокета
                this.OnSocketError(se);
            }
            catch (Exception e)
            {
                //генерируем событие об ошибке 
                this.OnServerError(e);
            }

          
        }


Подскажите как можно этого избежать. Нормально закрыть сокет. А потом создать новый но уже на другом порту или адресе. Или есть другие способы пересадить UdpClient на другой адрес или порт?

Заранее спасибо
PM MAIL   Вверх
jonie
Дата 26.2.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



перед рестартом привести всё в синхронизированное состояние - EndRecive вызвать имхо, а уже потом только "глушить" сервер и пересаздовать...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
DenwerD
Дата 26.2.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.3.2008

Репутация: нет
Всего: нет



Цитата(jonie @ 26.2.2009,  09:18)
перед рестартом привести всё в синхронизированное состояние - EndRecive вызвать имхо, а уже потом только "глушить" сервер и пересаздовать...

EndReceive конечно хорошо и правильно, но вот только вызывать его надо в методе  (udpReceiveMessageCallback) переданный в  BeginReceive в качестве коллбэка и передавать ему (EndReceive -у) в качестве аргумента результат асинхронной операции, а где же я его возьму  если  рестарт у меня в другом методе.

Вот такой вот геморой. 

Может кто нибудь знает как заглушить асинхронную операцию не из  коллбэка а из другого метода
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1122 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.