2013-01-22 7 views
0

네트워크상의 사용자가 자신의 PC 호스트 이름 및 IP 주소를 IT 부서에보고 할 수있는 도구를 만들려고합니다. 도움을 받으려면 창고 부서에서 PC와 사용자를 뒤섞기를 좋아합니다. 그래서 누가 어떤 PC에 있는지 확실히 말할 수 없습니다. 이것은 "Jim 's PC"라고 말하지 말고 "WAREHOUSE_WINXP_4"와 같은 유용한 정보를 제공 할 수있는 빠른 방법입니다.호스트 이름 및 IP 주소 표시

저는 제대로 작동하는 프로그램을 만들어야합니다. 오류없이 컴파일 및 실행되는 동안 텍스트 상자의 내용을 제대로 설정하지 못하는 것 같습니다. 이 프로그램은 매우 간단합니다 - 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

getHostname에 대한 호출에서 전역 변수 strHostname의 값을 설정 중이지만 getIPAddress에 대한 호출에서 해당 변수를 사용하고 있습니다. 그러나 getIPAddress 전에 getHostName이라고 부르기 전에 호출하고 있습니다. 호출 순서를 바꾸면 제대로 작동합니다.

더 나은 아직 글로벌 변수 사용을 재검토하여 이와 같은 종속성을 방지 할 수 있습니다. 함수 매개 변수는보다 쉽게 ​​디버깅 할 수있는 방식으로 작동합니다. getIPAddress의 매개 변수로 System.Net.Dns.GetHostEntry(strHostname).AddressList(0).ToString()을 사용할 수 있습니다.

+1

또는 오히려 잠수정 –

0

getIPAddressgetHostname 메서드 호출 순서를 변경하십시오. getIPAddress 메서드 내에서 strHostname 값을 사용하고 있지만 값이 아직 지정되지 않았습니다.

2

다른 사람들이 언급했듯이 잘못된 순서로 메서드를 호출하고 있습니다. getIPAddress 메서드는 strHostname 변수를 사용합니다. strHostname 변수는 getHostname 메서드에 의해 설정됩니다. 따라서 getIPAddress으로 전화하기 전에 먼저 getHostname으로 전화해야합니다.

그러나 실제로는 코드를 잘못된 순서로 호출하는 방식으로 코드를 디자인해야합니다. 버그를 쉽게 일으킬 수있는 숨겨진 규칙이없는 것이 가장 좋습니다.

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

관련 문제