首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Windows上使用WiFi直接应用程序?

如何在Windows上使用WiFi直接应用程序?
EN

Stack Overflow用户
提问于 2019-03-12 12:02:36
回答 1查看 5.1K关注 0票数 5

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

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

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

我找到了WiFi Direct,但是它们看起来是面向通用的,而我希望能够在一个简单的C#应用程序中使用它们。这个职位展示了如何对系统进行黑客攻击,并使用简单的C#控制台应用程序。到目前为止,还不错,效果不错。

为了简单的使用,我在Legacy模式下使用了API,给出了一个SSID和一个密码,这样我的平板电脑就可以看到一个网络。WiFiDirectAdvertisementPublisherAdvertisement.LegacySettings.IsEnabled = true;连接非常快,一切都很好。

它失败的地方是我使用一个流线(类似于splashtop),它在1-2分钟后断开连接(流线断开,而不是WiFi)。相反,如果我简单地转到Windows设置中的"Wireless“表单并激活它,通信就会持续超过24小时(而且它现在仍在运行,没有任何缺陷)。因此,问题不在于流线器,也不是WiFi设备硬件/驱动程序。我的第一个想法是,存在一个WiFi直接设置,该设置设置得很糟糕,以支持流数据流。

因此,我无法在网上找到医生。文档太.我仍然不知道我是否必须专注于WiFi Direct (真的吗?)还是坚持使用托管的网络,因为它证明了它工作得很好?

下面是我的代码,它可以很好地维护WiFi链接,但这会使流线在短时间内断开:

代码语言:javascript
复制
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());
        }
    }
}

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

EN

回答 1

Stack Overflow用户

发布于 2019-03-13 15:50:33

在查看了Mike引用的示例之后,我最终找到了这个链接:(下载本机c++示例) in 此页。它利用遗留模式下的WiFiDirect来模拟托管网络。它使用WRL。没有要黑的*.vcxproj文件,也没有链接到的“奇怪”库。此外,还有一些或多或少有用的解释-- 这里。这正是我想要的。

我必须说,这个信息很难找到.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55121033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档