Lokale IP abfragen

Code:
      Imports System.Net.Dns

      Public Class Form1
          Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
              Dim myIpAddresses As System.Net.IPAddress
              For Each myIpAddresses In Dns.GetHostAddresses(GetHostName)
                  MessageBox.Show(myIpAddresses.ToString)
              Next
          End Sub
      End Class
Da hat das Dns gefehlt. Einmal in der Hilfe unter GetHostAddresses nachgesehen, dann hättest den Fehler selbst bemerkt.
 
Hi,
das funktioniert genauso wenig - jetzt hat sich nur die Fehlermeldung geändert in "Der Name Dns wurde nicht deklariert"

Werde hier noch verrückt :confused:
 

Anhänge

  • vb-code.jpg
    vb-code.jpg
    11,9 KB · Aufrufe: 78
Zuletzt bearbeitet:
Hallo,

@Norbert: Jetzt bin ich ein wenig verwirrt - vielleicht habe ich auch nur einen Denkfehler - aber wenn ich System.Net.Dns importiere, brauche ich es doch bei GetHostAddresses nicht mehr zu qualifizieren. Und sei es doch nötig, so muss es dann auch bei GetHostName erfolgen :rolleyes:

@Thomas: Abstrahiere das Problem und erstelle einfach mal ein neues Projekt (mit 'MS VB 2005 ED' wie Du es ja angegeben hast) mit ausschliesslich folgendem code-behind:
Visual Basic:
Imports System.Net

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim myIpAddresses As IPAddress
        For Each myIpAddresses In Dns.GetHostAddresses(Dns.GetHostName)
            MessageBox.Show(myIpAddresses.ToString)
        Next
    End Sub
End Class
 
Zuletzt bearbeitet:
Hi,
also habe gerade mal ein neues Projekt angelegt.
Mit dem Code von "Ein Freund" (01.04.07 #7) geht es einwandfrei im neuen Projekt - beim Code von Norbert (05.04.07 #11) kommt die Fehlermeldung "Der Name Dns wurde nicht deklariert".
Auch der Code von "Ein Freund" von gestern abend funktioniert in einem neuen Projekt.
Danke für Eure Hilfe - aber in meinem Projekt, will es einfach nicht laufen - gib mir bald die kugel.
 
HI,

es hat funktioniert :) .
Ich musste nur Imports System.Net.Dns nach Imports System.IO einfügen - danach funktionierte es auf einmal :confused:
Code:
Imports System.IO
Imports System.Net.Dns
Public Class Form2
    Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Dim myIpAddresses As System.Net.IPAddress
        For Each myIpAddresses In GetHostAddresses(GetHostName)
            'MessageBox.Show(myIpAddresses.ToString)
            Label36.Text = myIpAddresses.ToString
        Next
...

Vielen Dank nochmal für Eure Geduld mit einem Anfänger wie ich es bin :)
(Die nächsten Fragen kommen bestimmt)
 
So, wieder etwas gelernt:

Bitte, wie verdammt dreckig ist Visual Basic eigentlich?

Da kann man doch glatt eine Klasse mit Imports angeben, um dann im Sourcecode nicht mehr zu wissen, zu welchem Typ die aufgerufene Methode überhaupt gehört. Das geht unter C# nicht.

Ich würde SEHR davon abraten, diesen Weg unter Visual Basic zu verwenden. Das bedeutet, statt
Code:
Imports System.Net.Dns

Module Module1

    Sub Main()
        Dim myIpAddresses As System.Net.IPAddress
        For Each myIpAddresses In GetHostAddresses(GetHostName)
            Console.WriteLine(myIpAddresses.ToString)
        Next
        Console.ReadLine()
    End Sub

End Module
sollte vielmehr
Code:
Imports System.Net

Module Module1

    Sub Main()
        Dim myIpAddresses As System.Net.IPAddress
        For Each myIpAddresses In Dns.GetHostAddresses(Dns.GetHostName)
            Console.WriteLine(myIpAddresses.ToString)
        Next
        Console.ReadLine()
    End Sub

End Module
verwendet werden. Selbst wenn es sich dabei um eine statische Klasse oder um eine Klasse mit statischen Methoden handelt.

Wäh, mir kommt gleich das Essen hoch ...
 
Hallo,

@Norbert: So dreckig ist VB nun auch wieder nicht. Es stellt halt Möglichkeiten für "Bequeme" dar, Bibliotheken zu nutzen. Geht allerdings zu Lasten der performance, da man auf Grund der Baumstruktur der Bibliotheken einiges an unnötigem Zeugs mit zur Verfügung stellt (ist aber bei anderen Prog.-Sprachen nicht anders). Man kann ja auch gern mal den Import ganz weglassen und stets voll qualifizieren (aber wer macht das schon - gerade bei grösseren Projekten).

Gruß
 
Zuletzt bearbeitet:
Natürlich ist das schmutzig. Unter C# definiert man max. einen Alias:

Code:
using d = System.Net.Dns;
Aber unter VB.NET muss kein Alias gesetzt werden. Wodurch man auf den ersten Blick natürlich nicht sieht, aus welcher Klasse die entsprechende Methode aufgerufen wurde. Und genau DAS ist schmutzig.
 
Ok, ich gebe Dir insofern recht, als das man bei VB.Net keinen alias setzen muss. Aber nur, weil das System einen unsauberen Programmierstil zulässt, muss man ihn ja nicht nutzen. Man kann ja auch unter VB.Net einen alias setzen:
Code:
Imports d = System.Net.Dns

Unter C# wird man halt zum sauberen Stil gezwungen...

Aber wie dem auch sei - ich wollte hier keinen Streit vom Zaun brechen :)
 
:) Gibt ja eh keinen Streit. Ich wundere mich immer wieder, welche Schweinereien VB.NET eigentlich zuläßt. Das ist alles.
 
Zurück