Reputation: 1
I'm trying to create a tool for users on our network to report their PC hostnames and IP addresses to the IT department. For assistance, we have a warehouse department that loves to shuffle around PCs and users, so I can't reliably tell who's on what PC. This is intended to be a quick way to stop them from saying "Jim's PC" and get them to give me useful information like "WAREHOUSE_WINXP_4".
I've created what I think should be a working program, and while it compiles and executes without errors, I can't seem to get the text box contents to set properly. The program is super-simple--just a form with 2 text boxes.
(Note: I'm more of a sysadmin/netadmin/infosec specialist, so I'm probably making some id10t mistakes here, but I'm kinda out of ideas on my own.)
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
Upvotes: 0
Views: 7376
Reputation: 43743
As others have mentioned, you are calling the methods in the wrong order. Your getIPAddress
method uses the strHostname
variable. The strHostname
variable is set by the getHostname
method. Therefore, you need to call getHostname
first, before you can call getIPAddress
.
However, the real problem is that you have designed your code in a way where it is possible to call the methods in the wrong order. It's always best to not have hidden rules like that which can easily cause bugs. For instance, if you wrote the code like this, the order in which you call the methods wouldn't matter anymore:
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
Upvotes: 2
Reputation: 1
Change the order of your getIPAddress
and getHostname
method calls. You are using the strHostname
value inside the getIPAddress
method, but it hasn't been assigned a value yet.
Upvotes: 0
Reputation: 1111
You are setting the value of the global variable strHostname
in the call to getHostname
, but you are using that variable in the call to getIPAddress
. However, you are calling getIPAddress
before you call getHostName
. Reverse the order of the calls and it should work.
Better yet, you might reconsider your use of global variables to prevent dependencies like this. A function parameter would work in a more easily debuggable manner. You could use System.Net.Dns.GetHostEntry(strHostname).AddressList(0).ToString()
as a parameter to getIPAddress
.
Upvotes: 0