none
Win7 und IPAdresse über Dns.GetHostEntry ermitteln RRS feed

  • Frage

  • Hallo,
    ich habe schon wieder unterschiede zwischen WinXP und WIN7 ausgemacht.
    Für eine Initialisierung eines TCP-Clients hole ich mir über dns.gethostentry die IP-Adresse. Die sieht unter WIN7 jetzt anders aus und erzeugt so einen Laufzeitfehler.

     

    Private ipAddress As IPAddress
    ipAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList(0)
    ....
    Dim host As String = ipAddress.ToString
    Dim port As Integer = 63000
    Dim tcpCli As New TcpClient(host, port)

     

    Unter WinXP habe ich : "192.168.178.6"
    Unter Win7   habe ich : "fe80::8da:1408:af6d:8017%13"

    ipconfig zeigt unter WIN7 u.a.:

    IPv4-Adresse  . . . . . . . . . ....... : 192.168.178.21
    Verbindungslokale IPv6-Adresse  . : fe80::8da:1408:af6d:8017%13

    1. Wie soll ich jetzt in der "neuen Welt" verfahren?
    2. Wie kann ich weiter für WinXP kompatibel bleiben?

    Gruss Klaus.

     

     

     

     

    Samstag, 21. November 2009 17:21

Antworten

  • Hallo Klaus,

    wenn Du schon mit der IPAdresse arbeiten möchtest, solltest Du auch tatsächlich mit der IP Adresse arbeiten und nicht mit einer beliebigen Darstellung einer solchen. Dazu würdest Du einen IPEndPoint erzeugen, bei dem Du IP Adresse und Port festlegst:

     Dim lEndpoint As New IPEndPoint(ipAddress, port)
     Dim tcpCli As New TcpClient(lEndpoint)

    Du kannst beim TCP Client aber auch direkt den Hostnamen angeben und musst nicht erst die IP Adresse manuell auflösen. Das macht der TcpClient bereits für Dich.

    Wenn Du ausschließlich die IPv4 Adressen des Hosts erhalten möchtest, musst Du durch das Array mit den Adressen laufen und alle IPv6 Adressen vom Ergebnis ausschließen:

    For Each Ip As IPAddress In Dns.GetHostEntry(Dns.GetHostName()).AddressList
      If Ip.AddressFamily <> AddressFamily.InterNetworkV6 Then
        ipAddress = Ip
        Exit For
      End If
    Next


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Samstag, 21. November 2009 19:53
    Moderator
  • Hallo,
    ich habe das Problem gelöst. Es ist wohl schon eine Weile her das ich mit mit dem TcpClient beschäftigte. Um den TcpClient ausführen zu können muss auch der entsprechende TcpListner aktiv sein. Ferner ist es besser mit dem Hostnamen zu arbeiten. Damit bekam ich auch Verbindung zum WinXP - Rechner. Mit der IP4 - Adresse konnte zum WinXP - Rechner keine Verbindung aufgemacht werden. Hier lautete die Fehlermeldung "Rechner konnte nicht gefunden werden.".

    Ich hoffe das war es jetzt zu diesem Themenkreis.

    Gruss Klaus.
    Sonntag, 22. November 2009 16:42

Alle Antworten

  • Hallo Klaus,

    wenn Du schon mit der IPAdresse arbeiten möchtest, solltest Du auch tatsächlich mit der IP Adresse arbeiten und nicht mit einer beliebigen Darstellung einer solchen. Dazu würdest Du einen IPEndPoint erzeugen, bei dem Du IP Adresse und Port festlegst:

     Dim lEndpoint As New IPEndPoint(ipAddress, port)
     Dim tcpCli As New TcpClient(lEndpoint)

    Du kannst beim TCP Client aber auch direkt den Hostnamen angeben und musst nicht erst die IP Adresse manuell auflösen. Das macht der TcpClient bereits für Dich.

    Wenn Du ausschließlich die IPv4 Adressen des Hosts erhalten möchtest, musst Du durch das Array mit den Adressen laufen und alle IPv6 Adressen vom Ergebnis ausschließen:

    For Each Ip As IPAddress In Dns.GetHostEntry(Dns.GetHostName()).AddressList
      If Ip.AddressFamily <> AddressFamily.InterNetworkV6 Then
        ipAddress = Ip
        Exit For
      End If
    Next


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Samstag, 21. November 2009 19:53
    Moderator
  • Hallo Thorsten,
    vielen Dank. Das wird mir wohl helfen. Aber ich sehe, ich sollte mich da noch weiter einlesen.
    Gruss Klaus.
    Samstag, 21. November 2009 21:48
  • Hallo Thorsten,
    dies hat wohl mit Win7 zu tun. Ich meine unter WinXP musste ich weiter keine Einstellungen vornehmen. Es handelt sich hier um einen lokalen Einsatz auf dem PC selber. Damit versende ich hier Nachrichten von einer Anwendung zur anderen.  Der Fehler tritt schon beim TcpClient auf.

     

    Dim tcpCli As New TcpClient(cIP_Adresse, port)
    Dim ns As NetworkStream = tcpCli.GetStream

     

    Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte 192.168.178.21:63000

    Gruss Klaus.
    Samstag, 21. November 2009 22:45
  • Wenn es sich um den lokalen PC handelt, warum verwendest Du dann nicht "localhost" bzw. "127.0.0.1", um Dich mit diesem zu verbinden? Ggf. musst Du die Firewall Einstellungen anpassen, dass Verbindungen zu Deinem Server auf Port 63000 erlaubt werden. Das wäre aber auch unter XP notwendig gewesen und hat nichts mit Windows 7 zu tun.

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Sonntag, 22. November 2009 12:03
    Moderator
  • Hallo,
    ich habe das Problem gelöst. Es ist wohl schon eine Weile her das ich mit mit dem TcpClient beschäftigte. Um den TcpClient ausführen zu können muss auch der entsprechende TcpListner aktiv sein. Ferner ist es besser mit dem Hostnamen zu arbeiten. Damit bekam ich auch Verbindung zum WinXP - Rechner. Mit der IP4 - Adresse konnte zum WinXP - Rechner keine Verbindung aufgemacht werden. Hier lautete die Fehlermeldung "Rechner konnte nicht gefunden werden.".

    Ich hoffe das war es jetzt zu diesem Themenkreis.

    Gruss Klaus.
    Sonntag, 22. November 2009 16:42