moder Skrevet 19. januar 2011 Del Skrevet 19. januar 2011 (endret) Hei Forum Jeg plages litt med denne koden: foreach (IPAddress ia in myIPs.AddressList) if (AddressFamily.InterNetwork == ia.AddressFamily) { //MessageBox.Show(ia.AddressFamily.ToString()); myIP = ia.Address.ToString(); } txtIp.Text = myIP.ToString(); IPAddress ipAddr = IPAddress.Parse(txtIp.Text); // txtIp.Text = ipAddr.ToString(); Problemet er at jeg har en ip addresse 42.93.37.114 men denne oppgir en ip addresse: 114.37.93.42 Vet dete hva som er galt? Endret 19. januar 2011 av moder Lenke til kommentar
Glavalavala Skrevet 19. januar 2011 Del Skrevet 19. januar 2011 Det er jo speilvendt. Hvorfor ???? Lenke til kommentar
moder Skrevet 19. januar 2011 Forfatter Del Skrevet 19. januar 2011 Det er jo speilvendt. Hvorfor ???? Det er det jeg ikke finner ut Lenke til kommentar
GeirGrusom Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 (endret) Kan du venligst ikke gjøre så masse redundante funksjoner i eksemplene dine? Det gjør det vanskeligere å lese koden. Koden din kan enkelt erstattes av txtIP.Text = (myIPs.FirstOrDefault() ?? IPAddress.None).ToString() Men du gjør masse unødvendige parsinger og tullball. edit: unnskyld at jeg er litt gretten. Jeg vet ikke hvorfor du får feil data, men det kan tenkes at det er en feil i konverteringen. Dette kan komme av all den redundante koden, men jeg vet ærlig talt ikke. Endret 24. januar 2011 av GeirGrusom Lenke til kommentar
moder Skrevet 24. januar 2011 Forfatter Del Skrevet 24. januar 2011 Kan du venligst ikke gjøre så masse redundante funksjoner i eksemplene dine? Det gjør det vanskeligere å lese koden. Koden din kan enkelt erstattes av txtIP.Text = (myIPs.FirstOrDefault() ?? IPAddress.None).ToString() Men du gjør masse unødvendige parsinger og tullball. edit: unnskyld at jeg er litt gretten. Jeg vet ikke hvorfor du får feil data, men det kan tenkes at det er en feil i konverteringen. Dette kan komme av all den redundante koden, men jeg vet ærlig talt ikke. Jeg får en feil melding på myIPs.FirstOrDefault() Der FirstOrDefault() ikke finnes? Lenke til kommentar
MailMan13 Skrevet 24. januar 2011 Del Skrevet 24. januar 2011 Da må du importere System.Linq på toppen. Lenke til kommentar
moder Skrevet 24. januar 2011 Forfatter Del Skrevet 24. januar 2011 Da må du importere System.Linq på toppen. Har allerede gjort det Lenke til kommentar
The Jackal Skrevet 25. januar 2011 Del Skrevet 25. januar 2011 Først og fremst er IPAddress.Address markert Obsolete, så denne skal du ikke bruke egentlig. Grunnen til at addressen kommer bakvendt, er pga (tror jeg) NetworkToHostOrder/HostToNetworkOrder. Maskinen/OSet har litt forskjellig måte å angi tall på kan man si. Anyways...her er en metode som gir deg en liste over alle IP4/6 adresser: private static IEnumerable<string> GetIpAddress(string hostNameOrAddress) { var builder = new StringBuilder(); var addresses = new List<string>(); var hostEntry = Dns.GetHostEntry(hostNameOrAddress); foreach (var ipAddress in hostEntry.AddressList) { var bytes = ipAddress.GetAddressBytes(); for (var i = 0; i < bytes.Length; i++) { builder.Append(bytes[i]); if (ipAddress.AddressFamily == AddressFamily.InterNetwork && i < bytes.Length - 1) builder.Append("."); else if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6 && i < bytes.Length - 1) builder.Append(":"); } addresses.Add(builder.ToString()); builder.Clear(); } return addresses; } Lenke til kommentar
GeirGrusom Skrevet 25. januar 2011 Del Skrevet 25. januar 2011 private static IEnumerable<string> GetIp4Addresses(string HostNameOrAddress) { var entry = Dns.GetHostEntry(HostNameOrAddress); var items = from item in entry.AddressList where item.AddressFamily == AddressFamily.InterNetwork select item.ToString(); return items; } The Jackal: Du kan bruke yield return så slipper du listen din. Endret den litt. Usikker på om forkortingen er helt korrekt, men det funker ihvertfall på localhost. private static IEnumerable<string> GetIpAddress(string hostNameOrAddress) { var builder = new StringBuilder(); var hostEntry = Dns.GetHostEntry(hostNameOrAddress); foreach (var ipAddress in hostEntry.AddressList) { var is_ip4 = ipAddress.AddressFamily == AddressFamily.InterNetwork; var bytes = ipAddress.GetAddressBytes(); for (var i = 0; i < bytes.Length; i++) { builder.Append(is_ip4 ? bytes[i].ToString() : bytes[i].ToString("x")); if(i < bytes.Length - 1) builder.Append(is_ip4 ? '.' : ':'); } var s = builder.ToString(); // Shorten IPv6 address if (!is_ip4) s = System.Text.RegularExpressions.Regex.Replace(s, "0:(0:)*0:", "::"); yield return s; builder.Clear(); } } Lenke til kommentar
The Jackal Skrevet 26. januar 2011 Del Skrevet 26. januar 2011 Du har naturligvis rett med yield return, koden jeg laget var bare noe jeg slang sammen for å bruke non obsolete properties Forøvrig litt merkelig at IPAddress.ToString() metoden kun fungerer for IP4 om jeg leser MSDN korrekt. Har vel kanskje noe med at den bare returnerer IPAddress.Address og den kun støtter 32bit adresser. Lenke til kommentar
GeirGrusom Skrevet 26. januar 2011 Del Skrevet 26. januar 2011 Ja, det er ganske snodig :S En kan lure på hva som skal være tanken bak det. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå