Benutzer mit den meisten Antworten
Win7 und IPAdresse über Dns.GetHostEntry ermitteln

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.- Bearbeitet Robert BreitenhoferModerator Montag, 23. November 2009 08:14 Formatierung
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- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 22. November 2009 17:26
- Als Antwort markiert Robert BreitenhoferModerator Montag, 23. November 2009 08:17
-
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.- Als Antwort markiert Robert BreitenhoferModerator Montag, 23. November 2009 08:18
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- Als Antwort vorgeschlagen Thorsten DörflerModerator Sonntag, 22. November 2009 17:26
- Als Antwort markiert Robert BreitenhoferModerator Montag, 23. November 2009 08:17
-
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
Gruss Klaus.- Bearbeitet Robert BreitenhoferModerator Montag, 23. November 2009 08:17 Formatierung
-
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 -
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.- Als Antwort markiert Robert BreitenhoferModerator Montag, 23. November 2009 08:18