| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > Рестарт Udp Сервера |
| Автор: DenwerD 25.2.2009, 16:28 | ||||
| Доброго времени суток. Пишу Udp сервер(UdpServer) принимающей частью служет System.Net.UdpClient - создаётся он в конструкторе UdpServer. Даннные на UdpClient принимается асинхронно. У UdpServer есть метод Start() который запускает метод UdpClient.BeginReceive Так же у UdpServer есть метод Restart который должен если произошли изминения (например порт сменился) должен пересоздать UdpClent Вот метод Restart
В результате его вызова генерируется исключение в следующем методе
Подскажите как можно этого избежать. Нормально закрыть сокет. А потом создать новый но уже на другом порту или адресе. Или есть другие способы пересадить UdpClient на другой адрес или порт? Заранее спасибо |
| Автор: jonie 26.2.2009, 09:18 |
| перед рестартом привести всё в синхронизированное состояние - EndRecive вызвать имхо, а уже потом только "глушить" сервер и пересаздовать... |
| Автор: DenwerD 26.2.2009, 10:07 | ||
EndReceive конечно хорошо и правильно, но вот только вызывать его надо в методе (udpReceiveMessageCallback) переданный в BeginReceive в качестве коллбэка и передавать ему (EndReceive -у) в качестве аргумента результат асинхронной операции, а где же я его возьму если рестарт у меня в другом методе. Вот такой вот геморой. Может кто нибудь знает как заглушить асинхронную операцию не из коллбэка а из другого метода |