При использовании WiFi Direct Api в Windows? - PullRequest
1 голос
/ 12 марта 2019

В настоящее время я разрабатываю приложение, в котором мне нужно создать ссылку (читай: WiFi link ) между настольным приложением (в Windows 10) и планшетом (Android, но это не имеет значения).Рабочий процесс: Нажать кнопку -> повысить привилегии, если необходимо -> Создать размещенную в сети сеть WiFi * -> Разрешить устройству подключаться с предоставлением SSID /пароль / динамический IP-адрес ...

Ранее я использовал системный вызов netsh (запуск приложения с повышенными привилегиями) для создания размещенной сети.Теперь кажется, что все меньше и меньше возможно поступить таким образом (пример: на том же компьютере он работал на Win 7, но больше не работает на Win 10).Кажется, это проблема драйвера, потому что он все еще работает с внешней антенной USB, но не с внутренней антенной.В любом случае, я не хочу идти дальше с этим решением.

Моя цель : иметь возможность делать это программно с помощью API.Я видел много дискуссий о WiFi Direct против Hosted Network , и кажется, что Hosted Network - исчезающая технология, в то время как WiFi Direct имеет блестящее будущее ???Я не знаю.

Я нашел WiFi Direct API, но они выглядят Универсальные Windows ( UWP ), в то время как я хочу иметь возможностьиспользовать их в простом приложении C #. В этом посте показано, как взломать систему и использовать API в простом консольном приложении C #.Пока все хорошо, все работало.

Для простоты использования я использовал API в режиме Legacy , задав SSID и пароль таким образом, чтобы мой планшет мог их видеть.сеть.WiFiDirectAdvertisementPublisherAdvertisement.LegacySettings.IsEnabled = true; Соединение очень быстрое и все хорошо.

Я терплю неудачу, когда использую стример (что-то вроде splashtop), и он отключается через 1-2 минуты (стример отключается, а не WiFi),Напротив, если я просто перейду к форме «Точка беспроводного доступа» в настройках Windows и активирую ее, связь будет продолжаться более 24 часов (и она все еще работает без сбоев).Таким образом, проблема не в стримере, ни в оборудовании / драйвере устройства WiFi.Моя первая идея заключается в том, что есть параметр WiFi Direct , который плохо настроен для поддержки потокового потока данных.

В связи с этим я не могу найти документ в Интернете.Документация Microsoft Wlanapi.dll так себе ... и я до сих пор не знаю, должен ли я сосредоточиться на WiFi Direct (правда?) Илипридерживайтесь Hosted Network , потому что он доказал, что он работает нормально?

Вот мой код, который отлично работает для поддержания соединения WiFi, но заставляет стример отключаться в ближайшее время:

using System;
using Windows.Devices.WiFiDirect;
using Windows.Security.Credentials;

namespace WFDcs_1
{
    class Program
    {
        private WiFiDirectAdvertisementPublisher mPublisher = null;
        private bool mConnected = false;

        static void Main(string[] args)
        {
            Program zeProgram = new Program(args);
        }

        Program(string[] args)
        {
            StartAdvertisement(WiFiDirectAdvertisementListenStateDiscoverability.Normal);

            Console.WriteLine("Hit a key to quit...");
            Console.ReadKey();
        }

        void StopAdvertisement()
        {
            if (mConnected)
            {
                mPublisher.Stop();
                mPublisher.StatusChanged -= OnStatusChanged;
            }
        }

        void StartAdvertisement(WiFiDirectAdvertisementListenStateDiscoverability discoverability)
        {
            if ( mPublisher == null )
            {
                mPublisher = new WiFiDirectAdvertisementPublisher();
            }

            mPublisher.StatusChanged += OnStatusChanged;
            mPublisher.Advertisement.IsAutonomousGroupOwnerEnabled = true;
            mPublisher.Advertisement.LegacySettings.IsEnabled = true;
            mPublisher.Advertisement.LegacySettings.Ssid = "MyGloriousSSID";

            PasswordCredential lCred = new PasswordCredential();
            lCred.Password = "test1234";

            mPublisher.Advertisement.LegacySettings.Passphrase = lCred;

            mPublisher.Advertisement.ListenStateDiscoverability = discoverability;
            mPublisher.Start();
        }

        void OnStatusChanged(WiFiDirectAdvertisementPublisher sender, WiFiDirectAdvertisementPublisherStatusChangedEventArgs statusEventArgs)
        {
            // *** 1 ***
            Console.WriteLine("OnStatusChanged(...): New connection status: {0}", statusEventArgs.Status.ToString());
        }
    }
}

Буду признателен за некоторые ссылки на учебные пособия, примеры, подсказки, все, что может мне помочь.Спасибо!

1 Ответ

0 голосов
/ 13 марта 2019

Посмотрев на пример, на который ссылается Майк Петриченко, я наконец нашел эту ссылку: (пример для загрузки на родном c ++) на этой странице .Он использует WiFiDirect в унаследованном режиме для имитации размещенной сети.Он использует WRL.Нет *.vcxproj файла для взлома, нет "странной" библиотеки для ссылки.Также есть несколько более или менее полезных объяснений здесь .Именно то, что я хотел.

Я должен сказать, что эту информацию было нелегко найти ...

...