350 likes | 578 Views
Visual Basic .NET 網際網路程式設計. Chpater 16. 16-1 Windows Networking 基本概念. 在 Microsoft Windows 的環境裏,“ Windows Networking” 泛指由 Microsoft Windows NT/2000 Server 或 95/98 所提供的網路資源,如分享目錄、印表機等,可透過“連線網路磁碟機”、“中斷網路磁碟機”、“網路印表機”及“網路芳鄰”等功能來達成。. 一般而言,網路架構大致如下:
E N D
Visual Basic .NET網際網路程式設計 Chpater 16
16-1 Windows Networking基本概念 • 在Microsoft Windows的環境裏,“Windows Networking”泛指由Microsoft Windows NT/2000 Server或95/98所提供的網路資源,如分享目錄、印表機等,可透過“連線網路磁碟機”、“中斷網路磁碟機”、“網路印表機”及“網路芳鄰”等功能來達成。
一般而言,網路架構大致如下: • 網路服務提供者(Network Service Provider):如Windows NT/2000 Server、Novell NetWare、Linux、AppleTalk等。 • 網域(Domain)。 • 伺服器(Server):如Windows NT Server。 • 資源分享(Network Resource):如目錄、印表機等。
雖然Microsoft .NET提供不少的Class Library,但在網路資源應用程式上,並無相關的Class Library,因此必須使用Windows API處理。Microsoft Windows提供了一組API來支援網路資源應用(Windows Networking)此種類型的功能,稱為Microsoft Windows Networking API,簡稱為WNet。 • 運用Microsoft Windows Networking API來建立網路資源的好處是,由於在網路中,網服務提供者(Network Provider)不一定是由Microsoft Windows NT/2000 Server所組成的,亦有可能是Novell、Linux、UNIX等其它類型的Server,因此若由應用程式來判斷,將造成不少的麻類,也較不易達成。而Microsoft Windows Networking API的好處就是“Network Independence”,不論網服務提供者為何,只要是已連上線的網路,並且提供網路資源分享,應用程式均可透過Microsoft Windows Networking API瀏覽、新增或結束網路上的資源。
有關Microsoft Windows Networking API函數,主要是透過MPR.DLL提供,Microsoft Windows Networking API共提供以下之函數功能: • WNetAddConnection:建立網路資源連線。 • WNetAddConnection2:建立網路資源連線。 • WNetAddConnection3:建立網路資源連線。 • WNetCancelConnection:結束網路連線。 • WNetCancelConnection2:結束網路連線。 • WNetCloseEnum:結束網路資源列舉。 • WNetConnectionDialog:開啟連線對話盒,以建立網路資源的連線。 • WnetConnectionDialog1:開啟連線對話盒,以建立網路資源的連線。 • WNetDisconnectDialog:開啟中斷連線對話盒,以中斷網路資源的連線。 • WNetDisconnectDialog1:開啟中斷連線對話盒,以中斷網路資源的連線。
WNetEnumResource:列舉網路資源。 • WNetGetConnection:取得本機(Local)或連線資源的網路名稱。 • WNetGetLastError:取得網路錯誤訊息。 • WNetGetNetworkInformation:取得網路中Network Provider的資訊。 • WNetGetProviderName:取得網路中Network Provider的名稱。 • WNetGetResourceInformation:取得網路中提供網路資源的Network Provider資訊。 • WNetGetResourceParent:取得網路中提供網路資源的Network Provider。 • WNetGetUniversalName:取得網路中一個文件的遠程名稱及UNC(Universal Naming Convention)名稱。 • WNetGetUser:取得用以連接網路資源的使用者名稱。 • WNetOpenEnum:啟動網路資源列舉。 • WNetUseConnection:建立網路資源連線(類似WnetAdd Connection3)。 • MultinetGetConnectionPerformance:取得網路效能。
透過Microsoft Windows Networking API,應用程式可以: • 瀏覽網路中可使用的網路資源(Enumerate Network Resource)。 • 建立資源連線(Add Connection)。 • 結束資源連線(Cancel Connection)。 • 取得網資源的相關資訊,如使用者名稱、Network Provider資訊等。
16-2 連線網路磁碟機/瀏覽印表機連接埠 • 在Microsoft Windows的系統中,欲使用網路中所共用的目錄或檔案,可使用檔案總管中的“連線網路磁機”(Map Network Driver)的功能來達成,如下圖所示:
<DllImport("mpr.dll")> Public Function WnetConnectionDialog _ (ByVal hwnd As Integer, _ ByVal dwType As Integer) As Integer End Function • 欲開啟連線網路磁碟機對話盒,最簡單的方法是使用WNet API所提供的WNetConnectionDialog函數,其宣告方式:
參數表: 其中dwType參數為以下之設定值:
回傳值: (Integer)0表示成功。如使用者取消操作,則返回-1。如錯誤訊息為ERROR_EXTENDED_ERROR,則可使用WNetGetLastError取得額外的錯誤訊息。 錯誤訊息:
16-3 中斷網路磁碟機/印表機 • 與連線網路WNetConnectionDialog相對應的,則是Wnet Disconnect Dialog函數,利用此函數,可出現如下圖之對話盒,以便使用者中斷網路磁碟機之連線。
WNetDisconnectDialog宣告方式如下: <DllImport("mpr.dll")>Public Function WNetDisconnectDialog _ (ByVal hwnd As Integer, _ ByVal dwType As Integer) As Integer End Function • 參數表
回傳值: (Integer)0表示成功。如使用者取消操作,則返回-1。如錯誤訊息為ERROR_EXTENDED_ERROR,則可使用WNetGetLastError取得額外的錯誤訊息。 錯誤訊息:
16-4 建立網路資源連線 - 1 • Microsoft Windows Networking API提供了一組API,用以建立網路資源連線: • WNetAddConnection • WNetAddConnection2 • WNetAddConnection3 • 這三個API都是用以建立網路源連線,其宣告方式大同小異。
WNetAddConnection宣告方式: <DllImport("mpr.dll")> _ Public Function WNetAddConnection _ (ByVal lpszNetPath As String, _ ByVal lpszPassword As String, _ ByVal lpszLocalName As String) As Integer End Function • 參數表
範例16-4 WNetAddConnection.sln • WNetAddConnection一共有三個參數,分別代表: • 欲連線的共享路徑(lpszNetPath):例如筆者網路中有一Server名為“LeoHuang”,其中“D”為其共享名稱,則其共享路徑為\\LeoHuang\D。 • 密碼(lpszPassword):為登錄共享路徑所須之密碼。 • 磁碟機代碼(lpszLocalName):則本機顯示共享路徑之代碼,可為磁碟機名稱或印表機連接埠,例如:F:或LTP1。
16-5 建立網路資源連線 - 2 • 相對於WNetAddConnection函數,WNetAddConnection2函數則更為複雜且完整,並適用各類Microsoft Windows系統,主要的差異在於WNetAddConnection2需定義: • 欲連線的共享路徑名稱。 • 磁碟機代碼。 • 使用者登錄名稱。 • 密碼。 • 連線資源型態,如磁碟機、印表機等。 • 網路Provider名稱,如Microsoft Windows Network。
WNetAddConnection2宣告方式: Declare Function WNetAddConnection2 Lib "mpr.dll" _ Alias "WNetAddConnection2A"_ (ByRef lpNetResource As NETRESOURCE, _ ByVal lpPassword As String, _ ByVal lpUserName As String, _ ByVal dwFlags As Integer) As Integer • 參數表
其中NETRESOURCE結構參數之宣告: Structure NETRESOURCE Dim dwScope As Integer Dim dwType As Integer Dim dwDisplayType As Integer Dim dwUsage As Integer Dim lpLocalName As String Dim lpRemoteName As String Dim lpComment As String Dim lpProvider As String End Structure 其中: • dwScope:代表連線範圍,可為以下之參數:
dwType:代表連線資源為磁碟機或印表機,可為以下之參數:dwType:代表連線資源為磁碟機或印表機,可為以下之參數: • dwDisplayType
dwUsage • lpLocalName:磁碟機代號,如F:或LTP1。 • lpRemoteName:欲連線的網路名稱。 • lpProvider:網路Provider名稱。 回傳值: (Integer)0表示成功。如使用者取消操作,則返回-1。如錯誤訊息為ERROR_EXTENDED_ERROR,則可使用WNetGetLastError取得額外的錯誤訊息。
16-6 建立網路資源連線 - 3 Declare Function WNetAddConnection3 Lib "mpr.dll" _ Alias "WNetAddConnection3A" _ (ByVal hwnd As Integer, _ ByRef lpNetResource As NETRESOURCE, _ ByVal lpPassword As String, _ ByVal lpUserName As String, _ ByVal dwFlags As Integer) As Integer • 除了WNetAddConnection與WNetAddConnection2之外,外,WNet API另外提供WnetAddConnection3建立網路資源連線。
參數表 • 回傳值: (Integer)0表示成功。如使用者取消操作,則返回-1。如錯誤訊息為ERROR_EXTENDED_ERROR,則可使用WNetGetLastError取得額外的錯誤訊息。
16-7 中斷網路資源連線 - 1 • 在Microsoft Windows系統中,欲中斷某一網路資源連線,可利用檔案總管在連線資源上按下滑鼠右鍵,當出現Popup Menu選單時,選取“中斷(D)”則可完成中斷網路連線的程序。
WNet API中用以中斷網路資源連線的API有: • WNetCancelConnection • WNetCancelConnection2 • 此API與之前所介紹的WNetDisconnectDialog雷同,均為中斷資源連線之用,不同的是WNetDisconnectDialog會出現“中斷網路資源”對話盒,而WNetCancelConnection與WNetCancelConnection2,則直接中斷所指定之磁碟機代號。
WNetCancelConnection宣告方式 Declare Function WNetCancelConnection Lib "mpr.dll" _ Alias "WNetCancelConnectionA"_ (ByVal lpszName As String, _ ByVal fForce As Integer) As Integer • 參數表
16-8 中斷網路資源連線 - 2 • WNet API在支援中斷網路連的函數上,除了WNetDisconnectDialog、WNetDisconnectDialog1及WNetCancelConnection之外,另外一個API則是WNetCancelConnection2。 • WNetCancelConnection2與WNetCancelConnection雷同,除了之前的lpName及fForce參數之外,另外加入dwFlags參數。
WNetCancelConnection2的宣告方式 Declare Function WNetCancelConnection2 Lib "mpr.dll" _ Alias "WNetCancelConnection2A" _ (ByVal lpName As String, _ ByVal dwFlags As Integer, _ ByVal fForce As Integer) As Integer • 參數表
16-9 取得連線資源名稱 • 在Microsoft網路中,欲表達某一網路資源名稱,是用以下方式表示之: • 而在Microsoft Windows系統中,當成功的連結至網路上的資源後,檔案總管中會顯示其連結資源名稱,並用以下方式表示之: \\<Server>\<共享資源名稱> “共享資源名稱”於‘Server’(本機磁碟機名稱)
若想取得此連線資源名稱,可使用WNet API的WnetGetConnection。 Declare Function WNetGetConnection Lib "mpr.dll" _ Alias "WNetGetConnectionA" _ (ByVal lpszLocalName As String, _ ByVal lpszRemoteName As String, _ ByRef cbRemoteName As Integer) As Integer • 參數表
16-10 取得網路連線用者名稱 • 在Microsoft Windows網路環境中,不論登入本機或網路上所共享的資源,均需使用者名稱以茲登入確認,欲取得此使用者名稱,可使用WNetGetUser函數取得用以連接網路資源的使用者名稱。 Declare Function WNetGetUser Lib "mpr.dll" _ Alias "WNetGetUserA" _ (ByVal lpName As String, _ ByVal lpUserName As String, _ ByRef lpnLength As Integer) As Integer • 參數表
16-11 WNet API延伸錯誤訊息 • 如同所有函數一般,WNet API也提供了錯誤訊息的控制 - WNetGetLastError。 • 大部份的WNet API都會回傳一Integer值(dwResult),若執行成功,則dwResult會等於NO_ERROR(=0),若執行失敗,則會回傳相對應的錯誤碼,其中若錯誤碼為ERROR_EXTENDED_ERROR(=1208),則可以利用WNetGetLastError函數取得更進一步的延伸錯誤訊息。
WNetGetLastError的宣告方式 Declare Function WNetGetLastError Lib "mpr.dll" _ Alias "WNetGetLastErrorA" _ (ByRef lpError As Integer, _ ByVal lpErrorBuf As String, _ ByVal nErrorBufSize As Integer, _ ByVal lpNameBuf As String, _ ByVal nNameBufSize As Integer) As Integer • 參數表 • 回傳值: (Integer)0表示成功。ERROR_INVALID_ADDRESS表示無效。