Hallo, gerade versuche ich ein Youtube Video über TCPIP Kommunikation in C# nachzustellen und habe folgendes Problem. In der Zeile wo ich die IP Adresse für den Server berechne kommt immer ein Absturz: System.FormatException: Die Eingabezeichenfolge hat das falsche Format. bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) bei System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt) Meine IP ist vorab so definiert: String MyIP = "127.0.0.1"; Die Programmzeile die es dann verursacht ist diese: System.Net.IPAddress IP = new System.Net.IPAddress(long.Parse(MyIP)); Der Absturz kommt von den Punkten, wenn ich da einfach mal eine Zahl eintippe stürzt nix ab (und ich bekomme eine falsche IP Adresse natürlich..): String MyIP = "1272234"; -> Kein Absturz!! IP ist natürlich Humbug.. Das Parsen ist genau wie im Video, wieso ist das Format ungültig? Ich hab schon eine Stunde herum gegoogelt finde aber kein brauchbares Besipiel. Hat jemand ein Beispiel? Besten Dank, Thomas
Ich habe keine Ahnung von C#, und schaue mir auch keine YouTube-Videos über proggen an. Aber ich habe eine Vermutung, was long.parse() erwartet. Genaueres sollte in der Dokumentation dazu stehen. Wenn ich Microsoft richtig einschätze, ist die genau eine F1-Tastendruck entfernt. Oliver
Warum fragst du uns? Ich würde entweder Programmieren lernen oder vielleicht youtube fragen wie das geht......
Ich verstehe dein Problem nicht. Du hast du IP als String. Was soll den daraus werden ? Wenn du die Nummerisch brauchst musst du 4 Variabeln anlegen. Und das Teil in einer Schleife auseinander rupfen. Also 4 Strings binden. Dazu benutze ich die MID-Funktion und eine nette kleine For-Next Schleife. Sollen die nun einzelnen Blöcke eine Zahl werden reicht ein einfacher VAL Befehl. Falls du den Code dazu nicht schaffst lerne einfach mal die Behandlung von Strings oder Frag mich ;) Denn DAS ist Anfängertechnik. Gruß Pucki
Benutz einfach IPAdress.parse() (https://docs.microsoft.com/de-de/dotnet/api/system.net.ipaddress.parse?view=netcore-3.1). Dann brauchst du diesen seltsamen Zwischenschritt über Long nicht und er kann auch mit ipv6 und den exotischeres ipv4 Formaten (z.b. 20.65535) korrekt umgehen. Auf der Seite von MS gibts auch ein Beispiel...
RTFM. Die IPAddress Klasse kennt selber ein Parse(String):
1 | System.Net.IPAddress IP = System.Net.IPAddress.Parse(MyIP); |
Eine Alternative wäre Dns.GetHostAddresses, das kann sowohl mit IPs (als String) als auch mit Hostnamen umgehen.
Alexander K. schrieb: > Wenn du die Nummerisch brauchst musst du 4 Variabeln anlegen. Und das > Teil in einer Schleife auseinander rupfen. Also 4 Strings binden. Möööp. Reingefallen. Bei der Angabe von nummerischen IPv4-Adressen darf man manche "0x00"-er Bytes weglassen. (*) d.H. "1.1" ist eine gültige Angabe und dasselbe wie 1.0.0.1 (Cloudflare Public DNS) "127.1" ist dasselbe wie "127.0.0.1" "192.168.42" ist dasselbe wie "192.168.0.42". *) Exakter: Wenn drei Blöcke angegeben sind, wird der letzte als 16Bit, bei nur zweien als 24 Bit ausgewertet, deshalb geht auch sowas: Jan B. schrieb: > exotischeres ipv4 Formaten (z.b. 20.65535) Nettes Andenken an 1980 :) d.H.: Alexander K. schrieb: > eine nette kleine For-Next Schleife. reicht nicht ganz. Du musst nach '.' trennen, die Trennstücke zählen, nach uint wandlen, alle bis auf den letzten auf 8 Bit limitieren, den letzten auf die übriggebliebenen Bits limitieren, entsprechend shiften, und zusammen-odern. Schöne Fingerübung für Bitoperationen, ansonsten nimm lieber die fertigen Funktionen aus deinem Framework.
:
Bearbeitet durch User
regmatchEx oderso. da kann man das gut mit wandeln... Müsste ich aber auch erst am Rechner nachsehen Aber ne lösung wurde ja schon genannt. IPAdress kann das von sich aus.
Εrnst B. schrieb: > Bei der Angabe von nummerischen IPv4-Adressen darf man manche "0x00"-er > Bytes weglassen. (*) das ist richtig, aber so wenig bekannt, das man sich kaum darauf verlassen kann. Wenn mit C Standardfunktionen zerlegt wird gibts noch die Falle das zB ein '070' einen octal Wert von dez. 56 darstellt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.