![](/img/trans.png)
[英]How does the command pattern solve the problem of hard-wired commands/requests?
[英]Determine whether someone is hard-wired to router in C++
我們正在嘗試提出一種最佳方法,以檢測用戶是否在Qt中開發的C ++程序中硬連線到其路由器。 如果他們也可以使用WiFi,也可以,但是也需要有硬連線。
這僅需要在Windows上運行,但需要在XP,Vista,7、8和8.1上運行。
我們嘗試了QNetworkConfiguration :: BearerType,它很有希望但似乎沒有給出任何明確的結果。
有沒有人做過或者有關於如何做的想法? 什么是最好的方法? 如果答案涉及QNetworkConfiguration,您如何看待它可能導致某人通過本地連接硬連線?
編輯清晰度我們雇用在家工作的銷售代理商,他們使用軟件電話進行呼叫。 我們要求將它們硬連線到路由器,以提高通話質量。 由於它們是在家工作,因此很難在不進行持續監控的情況下將其插入電源。 他們使用我們可以控制的自定義界面,並希望能夠在激活界面之前進行此檢查,並定期重新檢查以確保它們保持插入狀態。
不,這是不可能的。 一台計算機可能通過一打十二個交換機(或更糟的是,集線器)或一英里的非雙絞線電纜連接在一起,因此您無法通過軟件專門進行檢查。
相反,您可以做的是測量連接的質量(到默認網關和/或某個已知的良好外部主機的ping時間,到相同主機的數據包丟失等)。
如安德魯(+1!)所述,您應該檢查連接的質量,而不是類型/拓撲。 這可能是毫無意義,因為(ⅰ)拓撲結構可以從所使用的承載有很大的差異,和(ii)其它幾個因素會影響的連接,開。
也就是說, QNetworkConfiguration
仍然是承載檢查問題的答案,但通過QNetworkConfigurationManager
類。 的確,即使此時相應的(有線或未有線)連接不可用, 也可以使用有效的QNetworkConfiguration
。
您應該編寫如下代碼:
QNetworkConfiguration cfg;
QNetworkConfigurationManager ncm;
auto nc = ncm.allConfigurations(QNetworkConfiguration::Active); //ACTIVE ONES
for (auto &x : nc)
{
if (x.bearerType() == QNetworkConfiguration::BearerEthernet)
{
cfg = x;
// other stuff that pleases you
}
}
請注意,結果在某種程度上會凍結到創建QNetworkConfigurationManager
的時間。 要更新列表,在瀏覽之前,可以調用(耗時) updateConfigurations()
。
最后,通過利用configurationChanged(const QNetworkConfiguration & config)
信號,您可以跟蹤LAN連接的狀態更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.