成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

.NET Compact Framework 2.0 生成 Wi-Fi 發現應用程序

2010-08-28 10:50:27來源:西部e網作者:

適用于:
Microsoft .NET Compact Framework1.0 版
Microsoft .NET Compact Framework 2.0 版
基于 Windows Mobile 的設備

摘要:了解如何使用 .NET Compact Framework 2.0 和 OpenNETCF 共享的源代碼庫創建這樣一個應用程序,它檢測可用的無線網絡并從智能設備無線網絡適配器檢索配置信息。

從 Microsoft Download Center 下載 Build_WiFi_Discover_App_NETCF2.msi

 
本頁內容
簡介 簡介
OpenNETCF.org、Smart Device Framework 和 Shared Source License OpenNETCF.org、Smart Device Framework 和 Shared Source License
OpenNETCF.Net 命名空間 OpenNETCF.Net 命名空間
后臺工作 后臺工作
小結 小結

簡介

在當今的移動設備和嵌入設備領域中,無線以太網(即 Wi-Fi)網絡適配器越來越普遍,無線熱點在大多數技術專業領域幾乎無處不在。

遺憾的是,在基于 Windows Mobile 的設備上發現具有標準用戶接口 (UI) 和無線零配置(Wireless Zero Configuration,WZC)應用程序編程接口 (API) 集的可用無線網絡并非易事。

WZC 是 Microsoft 為無線網卡設計的一組標準化接口。如果一個無線卡的驅動程序設計為與 WZC 進行交互,則可通過該標準化接口對它進行控制和查詢,從而使配置和狀態查詢代碼保持一致,而無需考慮該適配器的制造商。雖然并非所有無線卡都與 WZC 兼容,但多數還是與之兼容的,這一高采用率使得 WZC 成為基于 Windows 的桌面計算機和 Windows Mobile 操作系統上的一個實際標準。遺憾的是,現在沒有關于 Windows CE 中 WZC 接口的文檔。

那么嵌入式開發人員能做些什么呢?本文將為您展示如何使用 OpenNETCF.org 健壯的共享源代碼(而非開放源代碼)庫編寫功能豐富的應用程序,從而顯示網絡適配器的屬性并發現附近的無線接入點。示例應用程序只包含大約 200 行手動鍵入的代碼,其中包括注釋、空白區域和括號。

如果您對該示例應用程序背后的操作感興趣,本文提供有"OpenNETCF.Net"命名空間的代碼示例下載(如果您引用 OpenNETCF.Net.dll 程序集,該項目運行正常)。本文還考慮到開發人員對庫進行四個簡單調用時實際發生情況的復雜性。

 

OpenNETCF.org、Smart Device Framework 和 Shared Source License

每當將第三方軟件引入您的解決方案時,都必須分析使用它的益處和風險。因此在您了解有關本示例應用程序的更多知識之前,應該了解有關 OpenNETCF.org、Smart Device Framework 和 OpenNETCF Shared Source License 的基本知識。

首先,OpenNETCF.org 是一個由 OpenNETCF Consulting, LLP 運作的項目。它是"以開放源代碼運動的精神"發起的。該項目為 .NET Compact Framework 開發社區從首批測試版本開始遇到的問題提供解決方案。

OpenNETCF.org 項目的主要產品是 Smart Device Framework,它是一個補充 .NET Compact Framework 1.0 版和 2.0 版的擴展類集。Smart Device Framework 提供很多可以在整個 .NET Framework 中使用的類、屬性和方法,以及對特定于 Windows CE 環境的類的較大補充。

Smart Device Framework 本質上是一個框架,它使 .NET Compact Framework 開發人員能夠以較短的投入市場的時間(相比于單獨使用 .NET Compact Framework 而言)提供功能更豐富的解決方案。最棒的是,您可以獲取完整的源代碼 - 源代碼完全免費;并且分發許可證非常友好。OpenNETCF Shared Source License(針對 Smart Device Framework 1.0 版到 1.4 版)對開發人員和業務而言是非常友好的。本文不對它進行詳細介紹,只點到為止。不過,該許可證僅一頁;語言撰寫簡練;經過市值達數十億美元的公司的律師團的審查,證明它可以投入使用。您可以查看完全許可證,它基本上聲明了以下內容:

如果您同意為最終產品提供某項重要價值,可以使用您的應用程序免費使用和分發 Smart Device Framework。

您可以按需(多與少自定)使用 Smart Device Framework。

您可以按照提供的方式分發 OpenNETCF 程序集或者將其合并到您自己的產品中。

在您的產品文檔中,需要聲明對 Smart Device Framework 的使用情況。

您不能將該框架作為一個獨立的產品進行簡單編譯和銷售。

您不能將因使用而產生問題的責任歸咎于 OpenNETCF。

Smart Device Framework 已被用戶下載近 200,000 次,有將近 2 年的使用歷史,其大小(完整格式)幾乎與 .NET Compact Framework 1.0 一樣大。盡管 Smart Device Framework 經過了一定程度的測試,但由于它是一個社區項目,因此可能存在一些 bug,該框架中的某些地方已受到了更多的開發關注。

既然了解了存在的風險,您就可以看到 Smart Device Framework 提供的巨大利益。

 

OpenNETCF.Net 命名空間

對于本文中的示例應用程序,將只使用 Smart Device Framework 中的一個命名空間:"OpenNETCF.Net"。示例源代碼約 3,800 行,如果代碼正常工作(您將看到確實如此)并且使用了其中的大部分代碼(您將這樣做),那么您可立即看到這樣做能節省數周的開發時間。

該命名空間包含大量用于網絡使用的類,包括文件傳輸協議(File Transfer Protocol,FTP)、網絡統計信息和藍牙。但本文主要介紹以下四個類:AdapterAccessPoint,以及 AdapterCollectionAccessPointCollection。顧名思義,后兩個類是前兩個類的集合類。

圖 1 是這些類的一個簡單關系圖。

\

1. AdapterAccessPoint 和相關聯的集合類。

Adapter AdapterCollection

Adapter 類表示系統中任何與以太網兼容的網絡適配器。該適配器可以是有線或無線網卡,或者是將以太網層呈現給網絡驅動程序接口規范 (NDIS) 的其他事物(例如,在通用串行總線 (USB)、串口或紅外數據協會(Infrared Data Association,IrDA)上活動的 Microsoft ActiveSync 連接)。

如上面圖 1 中所示,Adapter 類提供了大量屬性,其中大多數屬性描述 Internet 協議 (IP) 配置項(如 IP 地址、網關和子網掩碼)或無線連接信息(如信號強度)。

本文中的示例使用 Adapter 類顯示任何適配器(無線或有線的)的常用適配器配置信息。

AdapterCollection 類只是一個 CollectionBase 派生的類,它為對 Networking.GetAdapters 的調用返回的適配器提供一個容器。

如上面的代碼示例所示,您首先需要獲取該設備具有的所有 NDIS 適配器的列表,該列表通過從 Networking.GetAdapters 返回的一個 AdapterCollection 類的生成。該示例應用程序啟動后,通過調用 UpdateAdapters 可獲取一個列表,UpdateAdapters 獲取一個 AdapterCollection 類并用適配器名稱填充組合框。

void UpdateAdapters()
{
    // Get the available adapters
    m_adapters = Networking.GetAdapters();

    // Clear the combo
    cboAdapters.Items.Clear();

    // Add the adapters
    foreach (Adapter adapter in m_adapters)
    {
        cboAdapters.Items.Add(adapter);
    }
}

每次用戶更改所選的(或當前的)適配器時,都通過調用 UpdateConfig 使用所選適配器的配置信息更新該 UI,如以下代碼示例所示。

void UpdateConfig()
{
    tabConfiguration.SuspendLayout();

    // Update the adapter's configuration information
    lblMACAddress.Text = 
        BitConverter.ToString(m_currentAdapter.MacAddress);

    lblIPAddress.Text = m_currentAdapter.CurrentIpAddress;
    lblSubnet.Text = m_currentAdapter.CurrentSubnetMask;
    lblGateway.Text = m_currentAdapter.Gateway;

    // Wireless information
    bool wireless = m_currentAdapter.IsWireless;
    if (wireless)
    {
        lblIsWireless.Text = "True";
        lblWZCCompat.Text = 
            m_currentAdapter.IsWirelessZeroConfigCompatible.
                                                    ToString();
    }
    else
    {
        lblIsWireless.Text = "False";
        lblWZCCompat.Text = "N/A";
    }

    // Dynamic Host Configuration Protocol (DHCP) information
    bool dhcpEnabled = m_currentAdapter.DhcpEnabled;
    if (dhcpEnabled)
    {
        lblDHCPEnabled.Text = "True";
        lblLeaseObtained.Text =
            m_currentAdapter.LeaseObtained.ToShortDateString();
        lblLeaseExpires.Text = 
            m_currentAdapter.LeaseExpires.ToShortDateString(); ;
        mnuRenew.Enabled = true;
    }
    else
    {
        lblDHCPEnabled.Text = "False";
        lblLeaseObtained.Text = "N/A";
        lblLeaseExpires.Text = "N/A";
        mnuRenew.Enabled = false;
    }

    tabConfiguration.ResumeLayout();
}

圖 2 顯示運行在 HP iPAQ H5555 設備上的示例應用程序的 Configuration 選項卡。所選的適配器是內置的 802.11b 控制器。當該設備通過傳輸控制協議/Internet 協議 (TCP/IP) 上的 ActiveSync 進行連接時,ActiveSync 連接也將枚舉為一個適配器。

\

2. HP iPAQ H5555 設備上的內置 802.11b 適配器的適配器配置信息

對于本文的 Wi-Fi 發現目標,此處的重要屬性是 IsWirelessZeroConfigCompatible。如果某個無線適配器與 WZC 不兼容,則其大多數屬性需要通過專用 API 調用(通常不記錄或發布)進行訪問,從而導致開發人員無法創建自定義實現或軟件。然而,如果某個適配器與 WZC 兼容(越來越多的適配器都是這樣),您可以使用一組標準的 Windows API 獲取大量有關該適配器及其所識別的網絡接入點的信息。

正如前面提到的,尚未有正式編寫的 WZC API 文檔。但是 Microsoft Platform Builder 附帶有連接到 WZC 兼容的適配器的默認網絡 UI 的源代碼,該源代碼還提供了解 API 工作方式的方法(盡管比較有價值),這些 API 可通過 OpenNETCF.Net.AccessPoint 類以用戶友好的方式使用。

AccessPoint AccessPointCollection

無線網絡中令人感興趣的主要節點是訪問點。當您使用一個針對特定適配器的訪問點時,它們通常分為兩類:該適配器現在可以識別的訪問點,以及該適配器過去已經識別并且再次遇到時將優先處理的訪問點。這兩個列表通常是不同的,但它們通常將包含一些相同的訪問點。在 AccessPoint 類中,這些訪問點分別定義為鄰近(通常稱為可用的)訪問點和首選訪問點。訪問點的第三個重要術語是關聯訪問點,它是您目前在本例中運行網絡流量所使用的訪問點。很有可能沒有關聯訪問點,例如,如果您不在任何訪問點的范圍內,但如果您與訪問點相關聯,則關聯訪問點始終處于鄰近訪問點列表中。

在該示例中,您獲得并顯示以下兩個列表:首選訪問點和可用訪問點。對于當前選中的適配器識別的訪問點,信號強度以分貝為單位列出,附帶一個文字性說明(如 ExcellentGoodFairPoor)。

在圖 3 中您可以看到,當前示例包含兩個可用訪問點,它們都具有很好的強度,因為它們與這些訪問點的距離不足一英尺。AccessPoint 類也有幾個其他屬性,用于提供有關其功能和隱私的信息。

\

3. 可用(鄰近)無線網絡

 

后臺工作

雖然用于制作 WiFiDiscovery 應用程序的代碼非常簡單,但它掩蓋了 OpenNETCF 庫中 .NET Compact Framework 層上實際進行的工作。對 Networking.GetAdapters 的調用使用平臺調用來調用 iphlpapi.dll 文件的 GetAdaptersInfo 函數,該函數返回一個本機結構數組 - 每個本機結構針對一個注冊到系統中的網絡適配器(無線或有線)。

這些結構在內部從本機 API 封送為 IP_ADAPTER_INFO 類,這就是 API 返回數據的方式。每個 IP_ADAPTER_INFO 類轉換為公開的托管 Adapter 類,以提供所有適配器公開的一般信息(諸如適配器名稱、MAC 地址和 IP 配置)。

如果該適配器報告為一個以太網適配器,則隨后對該適配器進行查詢以查看它是否是無線的,并通過使用平臺調用來調用 wzcsapi.dll 文件的 WZCQueryInterface API 以查看它是否支持 WZC 接口。

如果發現某個適配器是無線的,則可以通過該設備的 NDIS 驅動程序(再次使用平臺)查詢有關它的大量信息。

如果還發現某個適配器與 WZC 兼容,則可以派生更多信息,方法是使用平臺調用來調用具有不同參數的 WZCQueryInterface API。例如,您可以查詢可用訪問點數組或關聯訪問點數組。

如果您查詢鄰近訪問點,甚至會更復雜,因為平臺調用對 NDIS 驅動程序的調用。

作為只用幾個簡單調用即產生結果的簡要示例,當您想找到系統中第一個適配器的鄰近訪問點時,請看看系統中的數據流。在 WiFiDiscovery.exe 中,代碼如下面簡單的四行代碼所示:

AdapterCollection adapters = Networking.GetAdapters();
adapters[0].IsWireless;
adapters[0].IsWirelessZeroConfigCompatible;
AccessPointCollection aps = adapters[0].NearbyAccessPoints;

圖 4 顯示該系統中的實際操作。

\

4. 用于獲取一個適配器的可用(鄰近)無線網絡列表的數據流。

 

小結

.NET Compact Framework 和托管代碼的目的通常是提高開發人員的工作效率。高工作效率意味著更快地投入市場,具有更豐富的功能集。它意味著較低成本的解決方案,較低的機會成本,以及更多資源可用于其他項目。

雖然本文介紹的示例應用程序沒有完整的無線應用程序那么健壯(例如,它不具有針對訪問點基礎架構的圖標,也無法更改訪問點關聯),但是它的確可以檢驗生產效率點。通過使用一個免費的共享的源代碼庫,您已經用不到 200 行的代碼創建了一個基本 Wi-Fi 發現應用程序。該應用程序顯示所有可用的適配器。對于無線適配器,該應用程序顯示所有的可用和首選訪問點以及它們的信號強度。另外,本文包括了七行代碼,用來更新任何適配器的 DHCP 地址(如果期望的結果是一個更基本的 UI,則只需一行代碼)。

托管代碼并不是每個業務問題的解決方案,C/C++ 肯定有其一席之地,但是在當今快節奏的業務環境中,開發人員必須始終以較高的效率為客戶服務。托管代碼(外加 Microsoft Visual Studio 2005 提供的 Rapid Application Development 工具)為開發人員在市場中成功競爭提供了一個堅實的基礎。

關鍵詞:dotnet
主站蜘蛛池模板: 邢台市| 裕民县| 巨鹿县| 武宣县| 哈巴河县| 芦山县| 酒泉市| 迁西县| 北海市| 安远县| 犍为县| 曲阜市| 大理市| 嘉荫县| 三明市| 旬邑县| 韶关市| 兴安盟| 驻马店市| 丰镇市| 东源县| 丰县| 微山县| 修武县| 青海省| 兴文县| 称多县| 桃园县| 睢宁县| 明光市| 富裕县| 建阳市| 澎湖县| 当阳市| 宽甸| 尚志市| 石柱| 永新县| 孝义市| 大冶市| 太白县|