locked
Баг с получением отклика от UDP порта. [WinRT] [C#] RRS feed

  • Вопрос

  • Здравствуйте, я к вам с проблемой, которая упоминалась несколько тредиков назад. Функция проверки доступности UDP порта вызывается в обработчике нажатия на кнопку. Первые два клика функция возвращает правдивые значения, но вот после третьего и последующих кликов функция всегда возвращает положительный статус открытого порта, при этом если программу перезапустить, то все начинается заново (два клика - нормально, третий и последующие  - всегда истина). С чем это может быть связано и как это вылечить? Вот код функции:

    private async Task<bool> CheckUDPPort(string _ip, string _port)
            {
                bool PortStatus = true;
                DatagramSocket socket = new DatagramSocket();
                socket.MessageReceived += (DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) =>
                {
                    try
                    {
                        DataReader reader = args.GetDataReader();
                        uint len = reader.UnconsumedBufferLength;
                        string str = reader.ReadString(len);
                    }
                    catch
                    {
                        PortStatus = false;
                    }
                };
                await socket.ConnectAsync(new HostName(_ip), _port);
                DataWriter writer = new DataWriter(socket.OutputStream);
                writer.WriteString("Nyaaa");
                await writer.StoreAsync();
                return PortStatus;
            }

    Спасибо за внимание к проблеме ^_^ 

    DreamSpark Premium User

    26 октября 2012 г. 16:23

Все ответы

  • Привет.

    Видимо проблема в самом SDK, скорее всего в дальнейшем ее исправят. Почему вы не сделаете отсылку приложением-сервером "специального" ответа, который клиент прочитает и выставит уже статус порта. И это все обернуть в разумный таймат, по которому сбрасывать состояние порта.


    Для связи [mail]

    13 ноября 2012 г. 11:02
  • Привет.

    Видимо проблема в самом SDK, скорее всего в дальнейшем ее исправят. Почему вы не сделаете отсылку приложением-сервером "специального" ответа, который клиент прочитает и выставит уже статус порта. И это все обернуть в разумный таймат, по которому сбрасывать состояние порта.


    Для связи [mail]

    Я пытаюсь сделать сканер портов :) Поэтому приложение-сервер не слишком подходит под мою задачу.

    DreamSpark Premium User

    13 ноября 2012 г. 11:54
  • Почему вы тогда выбрали UDP, а не TCP? С UDP т.к. он не гарантирует доставку данных и не держит соединение, проблем больше. Поэтому думаю и проверка порта работает не стабильно.

    Для связи [mail]

    14 ноября 2012 г. 12:04
  • Почему вы тогда выбрали UDP, а не TCP? С UDP т.к. он не гарантирует доставку данных и не держит соединение, проблем больше. Поэтому думаю и проверка порта работает не стабильно.

    Для связи [mail]


    так сканер портов ведь нужен для обнаружения уязвимости в системе. Соответственно необходимо проверять как TCP, так и UDP порты. тем более бывает, что открыт какой-то один из портов,  TCP или UDP.

    DreamSpark Premium User

    14 ноября 2012 г. 14:12