2013-01-22 186 views
0

我正在嘗試爲我們網絡上的用戶創建一個工具,以將他們的PC主機名和IP地址報告給IT部門。爲了獲得幫助,我們有一個倉庫部門,喜歡在個人電腦和用戶周圍洗牌,所以我無法可靠地告訴誰在PC上。這是爲了阻止他們說出「Jim's PC」,並讓他們給我提供有用的信息,如「WAREHOUSE_WINXP_4」。顯示主機名和IP地址

我創建了我認爲應該是一個工作程序,並且編譯並執行時沒有錯誤,但我似乎無法正確設置文本框內容。該程序非常簡單 - 只是一個包含2個文本框的表單。

(注:我更多的是系統管理員/ NETADMIN /信息安全專家,所以我可能在這裏做一些id10t失誤,但我還挺的想法在我自己的)

Public Class Form1 
    Dim strHostname As String 
    Dim strIPAddress As String 

    Public Sub getHostname() 
     strHostname = System.Net.Dns.GetHostName() 
     'txtHostname.Text = strHostname Apparently putting it here won't work. In Load() maybe? 
    End Sub 

    Public Sub getIPAddress() 
     strIPAddress = System.Net.Dns.GetHostEntry(strHostname).AddressList(0).ToString() 
     'txtIPAddress.Text = strIPAddress Apparently putting it here won't work. In Load() maybe? 
    End Sub 

    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
     getIPAddress() 
     getHostname() 
     txtHostname.Text = strHostname 
     txtIPAddress.Text = strIPAddress 
    End Sub 
End Class 

回答

0

您正在調用getHostname設置全局變量strHostname的值,但您在調用getIPAddress時使用該變量。但是,您致電getIPAddress之前你叫getHostName。顛倒電話的順序,它應該工作。

更好的是,您可能會重新考慮使用全局變量來防止這樣的依賴。函數參數將以更易於調試的方式工作。您可以使用System.Net.Dns.GetHostEntry(strHostname).AddressList(0).ToString()作爲參數getIPAddress

+1

或使它們函數返回一個結果,而不是潛艇 –

0

更改您的getIPAddressgetHostname方法調用的順序。您正在使用getIPAddress方法中的strHostname值,但尚未分配值。

2

正如其他人所提到的,您正在以錯誤的順序調用方法。您的getIPAddress方法使用strHostname變量。 strHostname變量由getHostname方法設置。因此,您需要先致電getHostname,然後才能致電getIPAddress

但是,真正的問題是,您設計的代碼的方式是可能的以錯誤的順序調用方法。最好不要隱藏那些容易導致錯誤的規則。舉例來說,如果你寫這樣的代碼,其中調用方法的順序將不再重要:

Imports System.Net 

Public Class Form1 
    Public Function GetHostName() As String 
     Return Dns.GetHostName() 
    End Sub 

    Public Function GetIpAddress() As String 
     Return Dns.GetHostEntry(GetHostname()).AddressList(0).ToString() 
    End Sub 

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
     txtHostname.Text = GetHostName() 
     txtIPAddress.Text = GetIpAddress() 
    End Sub 
End Class 
+0

告白時間:賦值語句裏面的GetIPAddress()是從另一個建議線程copypasta'd ...我想在這裏Stackoverflow。這真是一個愉快的巧合,因爲我剛纔注意到strHostname是同一個變量。 我會嘗試這些建議,讓大家知道會發生什麼。 非常感謝您幫助一位奮鬥的新手編碼器 - 這適合所有人。 – CelticWhisper