Serverliste in VB mit MySQL

  • VB.NET

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von tooostaaa.

    Serverliste in VB mit MySQL

    Hey Leute,

    ich bin aktuell dabei ein Spiel zu programmieren mit einigen Leuten, da ich den Launcher bastle und der eigentlich fertig ist bis auf eine Aufgabe, bei der ich hängen geblieben bin, brauch ich eure Hilfe.
    Wir haben fertige "Server.exe" Programme. Diese starten den Server für das Spiel, aber sie senden auch die IP des Servers an eine MySQL Datenbank. Sobald die Server.exe geschlossen wird, wird der eintrag aus der Tabelle wieder gelöscht.
    Jetzt geht es darum im Prinzip eine Liste in Visual Basic zu erstellen, die, wenn man auf den "Refresh" Button drückt aktualisiert wird, also die Werte(IPs) aus der Datenbank abruft und zwar alle, die Vorhanden sind und die löscht, die nicht mehr in der Datenbank stehen, weil der entsprechende Server zum Beispiel beendet wurde.

    Wie kann ich das am Besten anstellen ?

    Bin gespannt was ihr so für Ideen habt
    Danke im voraus :)

    Schönes Wochenende !
    Gruß tooostaaa
    komische Frage.
    Also wer sowas gelöst hat

    tooostaaa schrieb:

    Wir haben fertige "Server.exe" Programme. Diese starten den Server für das Spiel, aber sie senden auch die IP des Servers an eine MySQL Datenbank. Sobald die Server.exe geschlossen wird, wird der eintrag aus der Tabelle wieder gelöscht.
    der wird doch auch die Liste der aktiven Server vonne DB abrufen können.
    Theoretisch ja schon. Ich hab ein dickes MySQL Buch von Galileo Computing, allerdings blick ich da nicht durch, wie ich alle Einträge einer Spalte auslesen kann, mir reicht ja schon der MySQL Befehl, den Rest hab ich ja im Prinzip schon
    Die Query müsste so aussehen, diese einfach in ein PHP-Skript packen und halt die Query ausführen. Die PHP-Datei wird dann vom VB-Programm aufgerufen und die IPs oder whatever werden per echo zurückgegeben.

    SQL-Abfrage

    1. SELECT <Spalte> FROM <Tabelle>


    Quellcode

    1. $result = mysql_query($query);


    Und dann eben das echo zurückgeben.
    Ich bin weiter nun. So funktioniert der Code wie ich ihn möchte

    VB.NET-Quellcode

    1. Private Sub refreshServerlist()
    2. ListView1.Items.Clear()
    3. Dim conn As MySqlConnection
    4. conn = New MySqlConnection
    5. Dim connstring As String = "trololol"
    6. conn.ConnectionString = connstring
    7. Try
    8. conn.Open()
    9. Catch myerror As MySqlException
    10. MsgBox("Keine Verbindung zur Datenbank : " & myerror.Message.ToString)
    11. End Try
    12. Try
    13. Dim myAdapter As New MySqlDataAdapter
    14. Dim SQLAbfrage As String = "SELECT Server_IP FROM tbServerList "
    15. Dim myCommand As New MySqlCommand
    16. myCommand.Connection = conn
    17. myCommand.CommandText = SQLAbfrage
    18. myAdapter.SelectCommand = myCommand
    19. Dim myData As MySqlDataReader
    20. myData = myCommand.ExecuteReader()
    21. myData.Read()
    22. Do
    23. ListView1.Items.Add(myData("Server_IP"))
    24. Loop While myData.Read
    25. myData.Close()
    26. conn.Close()
    27. Catch ex As MySqlException
    28. MsgBox(ex, MsgBoxStyle.Critical)
    29. End Try
    30. End Sub


    Allerdings:
    ich möchte, dass auch der Ping in dem "Listview-ding" angezeigt wird.
    Da hab ich das hier gebastelt

    VB.NET-Quellcode

    1. Private Sub refreshServerlist()
    2. ListView1.Items.Clear()
    3. Dim conn As MySqlConnection
    4. conn = New MySqlConnection
    5. Dim connstring As String = "trololol"
    6. conn.ConnectionString = connstring
    7. Try
    8. conn.Open()
    9. Catch myerror As MySqlException
    10. MsgBox("Keine Verbindung zur Datenbank : " & myerror.Message.ToString)
    11. End Try
    12. Try
    13. Dim myAdapter As New MySqlDataAdapter
    14. Dim SQLAbfrage As String = "SELECT Server_IP FROM tbServerList "
    15. Dim myCommand As New MySqlCommand
    16. Dim ping As Net.NetworkInformation.Ping = New Net.NetworkInformation.Ping
    17. Dim pingSender As Net.NetworkInformation.Ping = New Ping()
    18. Dim reply As PingReply
    19. Dim help As String
    20. myCommand.Connection = conn
    21. myCommand.CommandText = SQLAbfrage
    22. myAdapter.SelectCommand = myCommand
    23. Dim myData As MySqlDataReader
    24. myData = myCommand.ExecuteReader()
    25. myData.Read()
    26. Do
    27. ListView1.Items.Add(myData("Server_IP"))
    28. reply = pingSender.Send(myData("Server_IP"), 10000)
    29. help = reply.RoundtripTime & "ms"
    30. ListView1.Items(myData("Server_IP")).SubItems.Add(help)
    31. Loop While myData.Read
    32. myData.Close()
    33. conn.Close()
    34. Catch ex As MySqlException
    35. MsgBox(ex, MsgBoxStyle.Critical)
    36. End Try
    37. End Sub


    Aber ich bekomme den Fehler hier im Anhang

    Das ist auch recht logisch, allerdings hab ich dann ein anderes Problem wenn ich den Code so umschreibe:

    VB.NET-Quellcode

    1. Do While myData.Read
    2. ListView1.Items.Add(myData("Server_IP"))
    3. reply = pingSender.Send(myData("Server_IP"), 10000)
    4. help = reply.RoundtripTime & "ms"
    5. ListView1.Items(myData("Server_IP")).SubItems.Add(help)
    6. Loop


    Dann fehlt immer der erste Eintrag in meiner Datenbank (siehe Unbenannt2.png) also in diesem Fall die 192.168.1.5

    Also hab ich mich für die andere Methode entschieden. Jetzt steh ich aktuell ein bisschen auf dem Schlauch und da ich jetzt seit gut 3 stunden an diesem Problem hänge hab ich mich bestimmt schon festgefahren in dieser Art und Weise das zu lösen. Bestimmt gibt es noch einen anderen Lösungsansatz, aber den blicke ich grade nicht :/
    Bilder
    • Unbenannt.png

      12,39 kB, 439×153, 130 mal angesehen
    • Unbenannt2.png

      11,82 kB, 372×198, 122 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „tooostaaa“ ()

    anstatt

    VB.NET-Quellcode

    1. Do While myData.Read
    2. ListView1.Items.Add(myData("Server_IP"))
    3. reply = pingSender.Send(myData("Server_IP"), 10000)
    4. help = reply.RoundtripTime & "ms"
    5. ListView1.Items(myData("Server_IP")).SubItems.Add(help)
    6. Loop


    das hier

    VB.NET-Quellcode

    1. Do
    2. ListView1.Items.Add(myData("Server_IP"))
    3. reply = pingSender.Send(myData("Server_IP"), 10000)
    4. help = reply.RoundtripTime & "ms"
    5. ListView1.Items(myData("Server_IP")).SubItems.Add(help)
    6. Loop While myData.Read


    weil damit kann ich wenigstens die IPs auslesen
    Um Himmelswillen! Du kannst doch nicht deine Nitrado Zugangsdaten direkt in das Programm reinschreiben!

    [VB 2012] Lizenzierungssystem

    Da hilft auch keine Möchtegern Kryptographie! Du hast gerade in einem öffentlichen Forum deine Zugangsdaten gepostet.

    Ich empfehle ein UMGEHENDES Ändern deines DB-Passwortes.
    dann entschlüssel das mal und sag mir meine zugangsdaten, die daten sind mit einem passwort verschlüsselt du nase. und wenn du das passwort rausbekommst, nunja, dann ists auch egal
    Woher weißt du eigentlich, dass das Möchtegern Kryptographie ist und nicht vielleicht der genialste Code den die Menschheit gesehen hat ?
    Naja, ich bezweifel das mal, aber im Endeffekt kannst du es garnicht wissen, weil du ihn garnicht sehen kannst
    und das das nitrado ist haste rausbekommen weil der benutzer mit "ni" anfängt ^^

    aber ich änder ist trotzdem mal ..

    ist im endeffekt immernoch keine lösung

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tooostaaa“ ()

    Garantiert nicht,
    dein Ansatz ist (wie gesagt) komplett falsch. Wenn du dein Kennwort im Programm irgendwie hinterlegt hast, hast du es komplett falsch aufgebaut.

    Du brauchst in jedemfalle eine passende Gegenstelle, welche nur die passenden Daten ausliefert.
    Du hast doch da sowieso nen Nitrado Webspace, oder? Da kannste dir einfach schnell was in PHP basteln.
    Okay, mein Problem ist nun
    Ich hab hier ein .php Script, ich weiß nichtmal ob der so funktioniert, weil ich ihn aktuell nicht aufrufen kann bzw weil ich sowieso nicht weiß wie ich die Daten, die dann auf der Website stehen sollten zeile für zeile auslesen kann
    hier mal der php code

    PHP-Quellcode

    1. <?php
    2. $dbhost = "trolf";
    3. $dbname = "trolf";
    4. $dbuser = "trolf";
    5. $dbpass = "trolf";
    6. $verbindung = mysql_connect($dbhost, $dbuser, $dbpass) or die("<br>Errorcode: <br>1</b>");
    7. mysql_select_db($dbname) or die ("<br>Errorcode: <br>2</b>");
    8. $abfrage = "SELECT Server_IP FROM tbServerList";
    9. $ergebnis = mysql_query($abfrage);
    10. while($row = mysql_fetch_object($ergebnis))
    11. {
    12. echo "$row->Server_IP <br>";
    13. }
    14. <?


    Das müsste hoffentlich funktionieren.

    Also, nun lese ich im Optimalfall jede Server IP Zeile für Zeile aus, weil ich jede IP in der ListView in VB einzeln brauche

    Also den ganzen Text von der seite ist kein Problem, aber eben Zeile für Zeile.
    Also im Optimalfall sieht es dann so aus

    Für jede Zeile auf der Seite
    Füge Zeile ListView hinzu
    Wiederhole das bis keine IP Addressen mehr vorhanden sind

    Das ist mein Konzept, aber wie ich das umsetzen soll, ist mein Problem.

    Aber vielleicht ist der Ansatz auch falsch, kann ich die IP Addresse, die innerhalb der while schleife ist

    PHP-Quellcode

    1. echo "$row->Server_IP <br>";


    auch vielleicht einfach irgendwie anders ausgeben, sodass es einfacher zu erfassen wäre für mein VB Programm ? Also mir ist eine andere Möglichkeit nicht bekannt, aber ich bin auch kein PHP Pro, hab das halt mit MySQL gelernt, aber eben nur, weils mit im Buch stand und nicht weil ich wirklich wollte. Die grundlegenden Kenntnisse sind aber vorhanden.

    Freue mich wie immer über Antworten :)
    Zunächst: Du solltest direkt mit den neuen MySQLi Modulen anfangen,
    die Legacy-MySQL Klassen sind in aktuellen PHP Versionen schon gar nicht mehr vorhanden.

    Als Methode des Datenaustauschs mit PHP würde ich spontan zu JSON raten. Es gibt dafür von Newtonsoft eine schöne Bibliothek für .net.
    In PHP lässt sich fast jeder belibige Datentyp mittels json_encode() einfach in einen JSON String umwandeln ;)

    Viele Grüße,
    Manawyrm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()