我正在尝试为我们网络上的用户创建一个工具,向IT部门报告他们的PC主机名和IP地址。为了获得帮助,我们有一个仓库部门,喜欢在个人电脑和用户身边随意播放,所以我无法可靠地分辨出谁在PC上。这是一个快速的方法来阻止他们说“吉姆的PC”并让他们给我有用的信息,如“WAREHOUSE_WINXP_4”。
我已经创建了我认为应该是一个工作程序,虽然它编译并执行没有错误,但我似乎无法正确设置文本框内容。该程序非常简单 - 只是一个带有2个文本框的表单。
(注意:我更多的是一个系统管理员/ netadmin / infosec专家,所以我可能在这里犯了一些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 :(得分: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
答案 1 :(得分:0)
您正在调用strHostname
的调用中设置全局变量getHostname
的值,但您在getIPAddress
的调用中使用了该变量。但是,您在致电getIPAddress
之前致电getHostName
。颠倒调用的顺序,它应该有效。
更好的是,您可能会重新考虑使用全局变量来防止这样的依赖。函数参数将以更容易调试的方式工作。您可以使用System.Net.Dns.GetHostEntry(strHostname).AddressList(0).ToString()
作为getIPAddress
的参数。
答案 2 :(得分:0)
更改getIPAddress
和getHostname
方法调用的顺序。您在strHostname
方法中使用getIPAddress
值,但尚未为其分配值。