C# 关于在Windows上使用WiFi Direct Api?

C# 关于在Windows上使用WiFi Direct Api?,c#,windows,wifi-direct,wifi,C#,Windows,Wifi Direct,Wifi,我目前正在开发一个应用程序,我需要在桌面应用程序(在Windows 10上)和平板电脑(Android,但这是不相关的)之间创建一个链接(读:WiFi链接)。工作流:按钮->根据需要提升权限->创建托管网络,如WiFi网络->允许设备连接,提供SSID/密码/动态IP地址 以前,我使用对netsh(以提升的权限运行应用程序)的系统调用来创建托管网络。现在看来,这样做的可能性越来越小(例如:在同一台计算机上,它在Win7上工作,但在Win10上不再工作)。这似乎是一个驱动程序的问题,因为它仍然与外

我目前正在开发一个应用程序,我需要在桌面应用程序(在Windows 10上)和平板电脑(Android,但这是不相关的)之间创建一个链接(读:WiFi链接)。工作流:按钮->根据需要提升权限->创建托管网络,如WiFi网络->允许设备连接,提供SSID/密码/动态IP地址

以前,我使用对netsh(以提升的权限运行应用程序)的系统调用来创建托管网络。现在看来,这样做的可能性越来越小(例如:在同一台计算机上,它在Win7上工作,但在Win10上不再工作)。这似乎是一个驱动程序的问题,因为它仍然与外部USB天线,但与内部天线不工作。无论如何,我不想进一步讨论这个解决方案

我的目标:能够使用API以编程方式实现这一点。我看到了很多关于WiFi Direct托管网络的讨论,似乎托管网络是一项正在消失的技术,而WiFi Direct有着辉煌的未来???我不知道

我找到了WiFi DirectAPI,但它们看起来面向通用窗口(UWP),而我希望能够在简单的C#应用程序中使用它们。演示如何破解系统,并通过简单的C#控制台应用程序使用API。到目前为止,一切顺利

为了便于使用,我在传统模式下使用了API,以我的平板电脑可以看到网络的方式提供SSID和密码
wifidirectadvisiontpublisheradvision.LegacySettings.IsEnabled=true连接非常快,一切都很好

失败的地方是我使用了一个拖缆(类似splashtop),它在1-2分钟后断开(拖缆断开,而不是WiFi)。相反,如果我只需在Windows设置中打开“无线接入点”窗体并将其激活,通信将保持24小时以上(并且现在仍在运行,没有任何缺陷)。因此,问题不在于拖缆,也不在于WiFi设备硬件/驱动程序。我的第一个想法是,存在一个WiFi Direct设置,该设置不足以维持流式数据流

我在网上找不到医生。世界是如此的。。。我仍然不知道我是必须专注于WiFi Direct(真的吗?)还是坚持使用托管网络,因为事实证明它工作正常

下面是我的代码,它可以很好地维护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());
        }
    }
}

我希望能参考一些教程,例子,提示,任何能帮助我的东西。谢谢大家!

在查看了Mike Petrichenko提到的例子后,我终于找到了这个链接:in。它利用传统模式下的WiFiDirect来模拟托管网络。它使用WRL。没有要破解的
*.vcxproj
文件,没有要链接的“奇怪”库。还有一些或多或少有用的解释。正是我想要的


我必须说这个信息不容易找到

事实上,您可以使用这两种API(HostedNetwork或WiFiDirect),但应该知道并非所有WiFi适配器都支持托管网络和/或WiFiDirect。WiFi适配器可能仅支持托管网络或WiFi Direct。因此,您的应用程序必须同时支持这两者。另一个问题是,在SoftAP模式(传统模式)下,托管网络和WiFi Direct会在您的电脑上创建虚拟AP。而WiFiDirect会创建多点对点连接,具有更好的功能和生产效率。您可以查看我们支持WiFi直连和托管网络的WiFi框架()是否可以设置一些设置(SSID/pwd除外)?MS doc对于这些API来说非常糟糕…这取决于您需要什么。对于AdHock(托管网络),只能设置SSID和PWD。因为它显示为访问点。WiFiDirect传统软AP模式也是如此。然而,普通的WiFiDirect允许提供很多设置:身份验证方法、组所有者、组ID、支持的服务和其他。事实上,正如我所写的,我的拖缆在一段时间后与WiFi Direct断开连接,但与托管网络断开连接。我无法启动托管网络,所以我想直接使用WiFi。这些API是否有一些教程和/或示例?以下是完整的演示应用程序:关键短语是“Wi-Fi Direct Legacy AP Mode”,这是支持“软AP”机制的Wi-Fi Direct的名称。此处所指的实用程序允许您为任何支持Wi-Fi Direct(大多数都支持)的Wi-Fi设备和驱动程序启用此模式。不需要从许多更新的驱动程序中删除不推荐使用的“托管网络”支持。