0

我正在尝试为我们网络上的用户创建一个工具,以向 IT 部门报告他们的 PC 主机名和 IP 地址。为了寻求帮助,我们有一个仓库部门,喜欢在 PC 和用户之间来回移动,所以我无法可靠地判断谁在哪台 PC 上。这是一种快速阻止他​​们说出“Jim 的 PC”并让他们给我提供有用信息的方法,例如“WAREHOUSE_WINXP_4”。

我创建了我认为应该是一个工作程序,虽然它编译和执行没有错误,但我似乎无法正确设置文本框内容。该程序非常简单——只是一个带有 2 个文本框的表单。

(注意:我更像是 sysadmin/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
4

3 回答 3

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
于 2013-01-22T19:05:39.643 回答
0

strHostname您在对 的调用中设置全局变量的值getHostname,但在对 的调用中使用了该变量getIPAddress。但是,您在调用getIPAddress 之前先调用getHostName。颠倒调用的顺序,它应该可以工作。

更好的是,您可能会重新考虑使用全局变量来防止这样的依赖关系。函数参数将以更容易调试的方式工作。您可以将System.Net.Dns.GetHostEntry(strHostname).AddressList(0).ToString()其用作getIPAddress.

于 2013-01-22T19:00:34.817 回答
0

更改您的getIPAddressgetHostname方法调用的顺序。您正在方法中使用该strHostnamegetIPAddress,但尚未为其分配值。

于 2013-01-22T19:00:47.877 回答