Fehler trotz richtige Convertierung !?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von PlatinSecurity.

    Fehler trotz richtige Convertierung !?

    Hallo zusammen,

    habe folgenden Code

    C#-Quellcode

    1. //Server wird gestartet oder auch gestoppt...
    2. private void start_Click(object sender, EventArgs e)
    3. {
    4. if (startbtn.Text == "Start")
    5. {
    6. if (iptxt.Text == "")
    7. {
    8. MessageBox.Show("Du musst eine IP eingeben!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
    9. }
    10. else
    11. {
    12. if (porttxt.Text == "")
    13. {
    14. MessageBox.Show("Du musst ein Port eingeben!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
    15. }
    16. else
    17. {
    18. startbtn.Text = "Stopp";
    19. iptxt.Enabled = false;
    20. porttxt.Enabled = false;
    21. System.Net.IPAddress ip = new System.Net.IPAddress(long.Parse(iptxt.Text));
    22. server.Start(ip, Convert.ToInt32(porttxt.Text));
    23. information.Text += "Der Server (" + iptxt.Text + ":" + porttxt.Text + ") wurde gestartet...";
    24. }
    25. }
    26. }
    27. else
    28. {
    29. startbtn.Text = "Start";
    30. iptxt.Enabled = true;
    31. porttxt.Enabled = true;
    32. //Falls wirklich der Server läuft, wird er auch gestoppt...
    33. if (server.IsStarted)
    34. {
    35. server.Stop();
    36. }
    37. }
    38. }

    Und es wird auch so kein Fehler angezeigt.
    Allerdings wenn ich das Programm starte und eine IP und ein Port eingebe und danach auf "Start" klicke,
    entsteht ein Fehler.

    Fehler:
    System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."

    Warum entsteht das ?

    Info: Die IP besteht aus "127.0.0.1"

    Danke im vorraus.

    PlatinSecurity schrieb:

    if (startbtn.Text == "Start")
    Das ist schlechter Stil. Du solltest die GUI von Daten trennen und diesen Zustand separat im Backend lagern + abfragen.

    PlatinSecurity schrieb:

    "127.0.0.1"
    Schau Dir die Zeichenfolge mal an. Ist das ein gültiger Long? Hint: Nein. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Das soll ja aber dann durch das nächste... also

    C#-Quellcode

    1. server.Start(ip, Convert.ToInt32(porttxt.Text));


    wieder gehen... denn wenn ich NUR eine Zahl eingebe "127001"
    dann entsteht ein Fehler genau da.

    Fehler: System.Net.Sockets.SocketException: "Die angeforderte Adresse ist in diesem Kontext ungültig"
    Verwende IPAddress.TryParse/Parse und nicht long. Eine IP4-Addresse ist eindeutig kein long, eher noch nen int, aber selbst dann müstest du erst die einzelnen ziffern in hex umwandeln und dann die punkte entfernen(oder Bitshiften und aufaddieren).
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    Verwende IPAddress.TryParse/Parse und nicht long.


    Parse ist aber in IPAddress nicht vorhanden.
    Entsteht ein Fehler.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Was für ein Fehler?


    Na genau DIESER Fehler wie ich erwähnt habe... "Parse ist in IPAddress nicht vorhanden."

    Trade schrieb:

    Wie sind Dein Code aus?


    Da bis jetzt nix geholfen hat... so wie oben beschrieben.

    Das was ich versucht hatte durch die Hilfe von euch war

    C#-Quellcode

    1. System.Net.IPAddress ip = new System.Net.IPAddress(IPAddress.Parse(iptxt.Text));

    Wurde als Fehler gekennzeichnet.

    Und durch die Hilfe mit der Seite "msdn.microsoft.com/de-de/libra…ress.parse(v=vs.110).aspx"

    War leider auch nicht Hilfreich da der Code

    C#-Quellcode

    1. public static IPAddress Parse(string ipString)

    dort auch falsch ist. Bei mir entsteht dieser Fehler
    "Fehler CS0501 "Server.Parse(string)" ist nicht als abstrakt, extern oder partiell gekennzeichnet und muss daher einen Text deklarieren."

    Also irgendwie ist hier der Wurm drin.

    PlatinSecurity schrieb:

    "Parse ist in IPAddress nicht vorhanden."
    So was:

    VB.NET-Quellcode

    1. Dim ip = IPAddress.Parse("bla")

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Schau Dir mal den Rückgabewert an. Du benutzt die Methode falsch, da Du gar nichts instanziieren musst.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Ach sooo ja ... habs jetzt so hier

    C#-Quellcode

    1. System.Net.IPAddress ip = IPAddress.Parse(iptxt.Text);


    jetzt geht es.
    Oh manno man :D

    Danke und bis zum nächsten mal ^^