-1

我目前正在开发一种工具,可以在给定情况下自动将用户连接到某些无线热点并对其进行身份验证。为了测试设备是否在强制门户后面,我通过 wininet 发送了一个 http 请求并检查它是否被重定向(是的,我知道 NCSI,但在这种情况下它不能正常工作)。

如果我在获得成功的 wlan 连接的回调后直接这样做,我会收到错误 12007(名称未解析),我认为这是因为 ipconfig 那时没有完全应用。如果我在 Sleep() 中输入 2-3 秒,我不会收到错误消息(因为我的硬件阵容中有更快的设备之一,它可能在其他目标设备上有所不同)。

有没有办法以编程方式检查配置是否已完全应用于界面?

目标操作系统是 Windows 7

在这种情况下,像 Jon 建议的那样重试并不是一个真正可行的选项,因为我必须在防火墙中启用热点注册模式,该模式会在一定数量的网络操作后再次关闭,这就是我想避免这种情况的原因。

4

2 回答 2

0

很可能最简单的解决方案是使用您控制的域中随机生成的名称进行 DNS 查找。例如79BF2DA7-EE45-4E11-89A4-45EEF2838003.guid.example.com。这当然应该失败,但它必须通过从 DNS 服务器返回否定响应来失败。并且该 DNS 服务器必须可以访问才能返回否定响应。

于 2016-08-10T09:52:01.657 回答
0

通常对于这样的情况,如果你的错误是可捕获的,你会重试一段时间然后放弃(超时)最近的错误。这更简单,并且与操作系统将要实现的逻辑相同

所以,在这种情况下,我会:

For X(default 30) seconds at most {
  test if I can get a dns resolution
  delay 1 second
}
于 2016-08-09T15:37:47.437 回答