在传统模式下使用 Wifi Direct API 每 2 分钟断开一次

Posted

技术标签:

【中文标题】在传统模式下使用 Wifi Direct API 每 2 分钟断开一次【英文标题】:Using Wifi Direct API in legacy mode disconnects every 2 minutes 【发布时间】:2020-11-25 16:47:31 【问题描述】:

我的软 ap 解决方案有问题。当我将客户端连接到 ap 时,连接建立并且一切正常。但我注意到,当我对主机设置 ping 时,它每 2 分钟失去一次连接,然后突然恢复连接。 不幸的是,这对我的解决方案来说是不可接受的。

我找到了这个链接:On using the WiFi Direct Api on Windows? ,它描述了同样的问题,但答案不够清楚,我想要一个代码示例或更详细的解释。

在我的解决方案中,我使用这个类: https://docs.microsoft.com/en-us/uwp/api/windows.devices.wifidirect.wifidirectadvertisementpublisher?view=winrt-19041 将旧设置设置为“启用”: https://docs.microsoft.com/en-us/uwp/api/windows.devices.wifidirect.wifidirectlegacysettings.isenabled?view=winrt-19041

On using the WiFi Direct Api on Windows?

【问题讨论】:

您的机器是否正在断电?通常您设置 KeepAive 选项,该选项会定期向服务器发送空消息,因此服务器不会关闭连接。请参阅以下内容:docs.microsoft.com/en-us/uwp/api/… 您好,感谢您的回答。我不使用 KeepAlive 选项。在我的解决方案中,我只使用我的问题中链接的 WiFiDirectAdvertisementPublisher 类。我需要从 Windows.Networking.Sockets 实现代码吗?我注意到这里:docs.microsoft.com/en-us/uwp/api/… 你只能将最短时间设置为 15 分钟,但是从设备到接入点的连接已经中断了 7 次。 WifiDriect 已经使用了套接字。问题是如何设置选项。我不确定现在的问题是否是由于设置了省电选项,因此在进入省电模式时连接会关闭;或 KeepAlive。您找到的链接是 KeepAlive 的服务器端,而不是您的客户端。 KeepAlive 是为了防止服务器在没有数据发送时关闭连接。所以通常服务器在关闭前等待 15 分钟(但这个时间可以更短)。阻止服务器关闭的客户端将发送空消息,因此服务器看不到空闲通道 也许是一个愚蠢的问题,但我不应该从两端 ping 防止插座进入省电模式吗?我写的脚本也是服务器端的,客户端只是使用普通的windows wifi接口通过ssid和psk连接。所以我只能在客户端上更改 Windows 设置,因为我还可以在服务器上编辑脚本。可能还需要指出的是,客户端没有通过服务器获得互联网访问权限,该 ap 仅用于客户端和服务器之间的连接。 这些机器不是我设计的!!!您必须检查机器关机选项,尤其是笔记本电脑。制造商想要宣传电池寿命,他们会不惜一切代价获得更多寿命。假设您有一台 PC 连接到一个不断更新的网站。您是否希望机器在您离开并停止使用鼠标和键盘时进入低功耗模式,即使互联网连接仍在 ping 通? 【参考方案1】:

我遇到了完全相同的问题,因为我从 MS 示例中删除了以下行:

var wiFiDirectDevice = await WiFiDirectDevice.FromIdAsync(deviceInfo.Id);

看来如果你不创建wifiDirectDevice对象,Windows会在两分钟后自动断开客户端(虽然在这期间你已经能够交换一些数据了)。 帮助我的是将我的代码与以下示例进行比较: https://github.com/gerfen/WiFiDirectLegacyAPCSharp/blob/master/WiFiDirectHotspotManager.cs#L128

请注意,我在添加此行时还遇到了另一个问题,因为根据客户端设备配置触发了异常(请参阅以下主题:Wi-Fi Direct UWP timeouts (Exception from HRESULT: 0x800705B4))

【讨论】:

以上是关于在传统模式下使用 Wifi Direct API 每 2 分钟断开一次的主要内容,如果未能解决你的问题,请参考以下文章

Android Wifi Direct 软 AP 配置

WiFi-Direct 获取设备名称

在 Android SDK 中选择 Wifi Direct 频道/频段?

Android | WIFI Direct -1 Basic knowledge

Android | WIFI Direct -1 Basic knowledge

Android | WIFI Direct -1 Basic knowledge