0

ネットワーク上のユーザーが PC のホスト名と IP アドレスを IT 部門に報告するためのツールを作成しようとしています。支援のために、PC とユーザーをシャッフルするのが大好きな倉庫部門があるため、誰がどの PC を使用しているかを確実に判断することはできません。これは、彼らが「ジムの 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

他の人が述べたように、メソッドを間違った順序で呼び出しています。メソッドgetIPAddressstrHostname変数を使用します。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

メソッド呼び出しの順序を変更しgetIPAddressます。メソッド内で値getHostnameを使用していますが、まだ値が割り当てられていません。strHostnamegetIPAddress

于 2013-01-22T19:00:47.877 に答える